C語言可變引數

2022-08-16 19:51:16 字數 893 閱讀 5984

一、可變引數函式表示:type fun(int num,...)

其中type表示函式返回值型別,num表示引數個數,而"..."表示所有的引數。

例:char fun(int num,...);

二、va_list,va_start(),va_arg(),va_end()意義及原函式表示。

1、va_list:表示引數列表。

2、va_start():初始化引數列表。

3、va_arg():獲取不同型別引數。

4、va_end():清空引數列表。

5、typedef char * va_list; 

#define _intsizeof(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

#define va_end(ap) ( ap = (va_list)0 )

6、(a+b-1)&~(b-1):在a和b都為2的n次方時,可以求出a和b中最大值的最小倍數。

所以(sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1)可用於位元組對齊。

#include#include

int func(int num,...) //

num代表引數個數

for(i=0;i<3;i++)

for(i=0;i<5;i++)

va_end(list);

return0;

} intmain()

c 語言可變引數

1 當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列 void foo void foo parm list,2 函式引數的傳遞原理 函式引數是以資料結構 棧的形式訪問,從右至左入棧.eg include void fun int a,int main output 12 343 獲...

c語言可變引數

ifdef debug print info x printk x,else print info x endif 一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個...

C語言可變引數

在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如 1 2 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 1 voidprintf...