天天看點

【c++】——可變參數宏__VA_ARGS__

轉載自:http://blog.sina.com.cn/s/blog_661314940100qmfg.html

用可變參數宏(variadic macros)傳遞可變參數表,你可能很熟悉在函數中使用可變參數表,如:

void printf(const char* format, …);

直到最近,可變參數表還是隻能應用在真正的函數中,不能使用在宏中。

C99編譯器标準終于改變了這種局面,它允許你可以定義可變參數宏(variadic macros),這樣你就可以使用擁有可以變化的參數表的宏。可變參數宏就像下面這個樣子:

#define debug(…) printf(__VA_ARGS__)

預設号代表一個可以變化的參數表。使用保留名 VA_ARGS 把參數傳遞給宏。當宏的調用展開時,實際的參數就傳遞給 printf()了。例如:

Debug(“Y = %d\n”, y);

而處理器會把宏的調用替換成:

printf(“Y = %d\n”, y);

因為debug()是一個可變參數宏,你能在每一次調用中傳遞不同數目的參數:

debug(“test”); //一個參數

可變參數宏不被ANSI/ISO C++ 所正式支援。是以,你應當檢查你的編譯器,看它是否支援這項技術。

c++

繼續閱讀