可變參數的 C 函數

VariadicFunction

1
2
3
4
5
6
7
8
#include <stdarg.h>  
void error(const char *fmt, ...)  
{  
va_list argp;  
va_start(argp, fmt);  
vfprintf(stderr, fmt, argp);  
va_end(argp);  
}  

...表達接受可變數量的參數,va_list argp 是一個指向第一個可變參數的指針,無法知道長度及型態, 沒有可移植 ) 的方法把可變數量的參數傳給下一個可變數量的參數的函式,有一些相依CPU的 方法 ,有部分可變數量參數的函式也提供接收 va_list 的版本如 vprintf, vfprintf, vsprintf

1
2
3
4
5
#define my_printf(format, ...) \  
do { \  
fprintf(stderr, "Calling printf with fmt %s\n", format); \  
some_other_variadac_function(format, ##__VA_ARGS__); \  
} while(0)  

Variadic Macros

1
#define ProxDebugPrintf(...) printf(__VA_ARGS__)

Variadic Macros 可以傳遞可變數量的參數