一、可變引數函式表示: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#includeint 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...