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
可以傳遞可變數量的參數