C++ 編譯器接受以下形式的 #define 預處理程序指令。
#define identifier (...) replacement_list #define identifier (identifier_list, ...) replacement_list
如果列出的宏參數以省略號結尾,那麼該宏的調用允許使用除了宏參數以外的其他更多參數。其他參數(包括逗號)收集到一個字符串中,宏替換列表中的名稱 __VA_ARGS__ 可以引用該字符串。以下示例說明了如何使用可變參數列表的宏。
#define debug(...) fprintf(stderr, __VA_ARGS__) #define showlist(...) puts(#__VA_ARGS__) #define report(test, ...) ((test)?puts(#test):\ printf(__VA_ARGS__)) debug(“Flag”); debug(“X = %d\n”,x); showlist(The first, second, and third items.); report(x>y, “x is %d but y is %d”, x, y);
其結果如下:
fprintf(stderr, “Flag”); fprintf(stderr, “X = %d\n”, x); puts(“The first, second, and third items.”); ((x>y)?puts(“x>y”):printf(“x is %d but y is %d”, x, y));