預定義除錯時 省略號(...)和 ##__VA_ARGS__ 的作用
阿新 • • 發佈:2018-11-19
參見例子
#define SHOWINFO_ON
#ifdef SHOWINFO_ON
#define showFuncInfo(format_MACRO, ...) printf("FILE: %s , LINE: %d: " format_MACRO "\n",__FILE__, __LINE__,##__VA_ARGS__)
#else
#define showFuncInfo(format_MACRO, ...)
#endif
新建h檔案,貼上上面程式碼,main中測試時,當註釋掉 #define SHOWINFO_ON 語句時,#else 部分生效,則showFuncInfo的功能就是啥也不做! 當#define SHOWINFO_ON 語句生效時,#ifdef部分語句生效,此時showFuncInfo(format_MACRO, ...)就等效於printf("FILE: %s , LINE: %d: " format_MACRO "\n",__FILE__, __LINE__,##__VA_ARGS__),此時,
showFuncInfo("%s", “abc”);<==>printf("FILE: %s , LINE: %d: %s \n",__FILE__, __LINE__, “abc”);
也就是說,format_MACRO表示格式符,...為引數列表,在展開時時被##__VA_ARGS__替代,注意format_MACRO在printf的雙引號,和##__VA_ARGS__在printf中的位置。
這樣做的好處就是,無論輸出多少個引數值,都可以以上面這種統一的形式進行輸出實現!