採用c語言程式設計的時候,函式中形式引數的數目通常是確定的,在呼叫時要依次給出與形式引數對應的所有實際引數。但在某些情況下希望函式的引數個數可以根據需要確定。例如
printf(constchar * _format, ...);
c語言可變引數通過三個巨集(va_start、va_end、va_arg)和乙個型別(va_list)實現。
typedef char *va_list;#define va_start _crt_va_start
#define va_arg _crt_va_arg
#define va_end _crt_va_end
#define _crt_va_start(ap,v) ( ap = (va_list)_addressof(v) + _intsizeof(v) )
////
#define _crt_va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )
////
功能:獲取可變參的值
#define _crt_va_end(ap) ( ap = (va_list)0 )
//功能:將ap置空
/*va_start example
*/#include
/*printf
*/#include
/*va_list, va_start, va_arg, va_end
*/void printfloats(int
n, ...)
va_end(vl);
printf("\n
");}int
main()
可變參函式
int add int x,int main int add int x,int sum 0 char point char x for int i 0 iint add int x,可變參函式原型,該函式中帶有識別符號的引數 x記錄的是引數的個數,後面的數字是需要求和的數。x的作用是為了標誌出加數...
可變參函式(my printf可變參函式的實現)
可變參函式 其引數列表的引數型別與個數可變,採用ansi標準形式時,引數個數可變的函式的原型宣告是 type funcname type para1,type para2,至少需要乙個普通的形式引數,後面的省略號不表示省略,而是函式原型的一部分,為引數佔位符,type是函式返回值和形式引數的型別 可...
可變形參函式
在c 程式設計中,有時我們需要編寫一些在源 編寫階段無法確定引數個數,有時甚至無法確定引數型別的函式。因此我們需要一類函式 它們可以在執行時取任意的實參個數並根據實參的個數自動處理不同實參的情形,或者至少可以在執行時指定任意的實參個數。在c 中實現乙個變參函式的方法有三種 重點介紹第一種方法和第三種...