@note: 只在windows中测试,未在linux上跑过
方法一: 通过宏传递
例如
1 void myprintf(const char* format, );
2
3 #ifndef PASS_ARGS
4 #define PASS_ARGS(_fmt,) \
5 myprintf(fmt,__VA_ARGS__)
6 #endif
这种方式最简单最直接,但不利于函数的封装调用。
方法二: 通过函数传递
2
3 void myprintf(const char* fmt, )
4 {
5 va_list args;
6 va_start(args, fmt);
7 myprintf_internal(fmt, args);
8 va_end(args);
9 }
这种方法可以在函数内传递 va_list
至于 myprintf(const char*, ...) 传给 myprintf_internal(const char*, ...)这种方式,貌似只能通过循环解析出实参个数和内容,再传递给下一个函数,感觉上这样做可能会存在性能损耗