###不定參數函數定義:
第一種:設定有多少個參數,來标志不定參數的結束
第二種:設定最後一個值為空,來标志不定參數的結束
#include "../h.h"
#define mylog(fmt, ...) myprint(__FILE__, __LINE__, fmt,##__VA_ARGS__)
void myprint(const char* filename, int line, const char* fmt, ...)
{
printf("%s, %d, ", filename, line);
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
}
// 設定最後一個值為空,來标志不定參數的結束
int print(const char* a, ...)
{
const char* arg = a;
va_list args;
va_start(args, a);
while(arg)
{
printf("%s\n", arg);
arg = va_arg(args, const char*);
}
va_end(args);
}
// 設定有多少個參數,來标志不定參數的結束
int add(int count, ...)
{
int i;
int sum = 0;
va_list args;
// 獲得不定參數的首位址
va_start(args, count);
for(i=0; i<count; ++i)
{
// 通過va_arg獲得參數
int arg = va_arg(args, int);
sum += arg;
}
// 參數擷取完畢
va_end(args);
return sum;
}
int main()
{
myprint(__FILE__, __LINE__, "haha%d\n", 100);
mylog("print in mylog %d\n", 100);
print("hello", "world", "haha", "you are dead", NULL);
int ret = add(3, 5, 6, 7);
printf("%d\n", ret);
return 0;
}