1. 程式人生 > >預定義除錯時 省略號(...)和 ##__VA_ARGS__ 的作用

預定義除錯時 省略號(...)和 ##__VA_ARGS__ 的作用

參見例子

#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中的位置。 

這樣做的好處就是,無論輸出多少個引數值,都可以以上面這種統一的形式進行輸出實現!