@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*, ...)這種方式,貌似只能通過循環解析出實參個數和內容,再傳遞給下一個函數,感覺上這樣做可能會存在性能損耗