2013-02-07 138 views
4

有沒有一種方法來#define宏可變長度參數?具有可變長度參數的宏

#define CALL(ar1, ar2, ar3) 
do something 
#endif 

在C代碼

CALL(0); 
CALL(0,1); 
CALL(0,1,2) 

所有調用上述CALL宏。如果沒有使用ar2,ar3,則預處理器會忽略ar2或ar3的行。

+2

請在搜索之前先搜索一下,或者只是在我最喜歡的搜索引擎中放入「可變長參數的宏」會帶來很多結果。 –

回答

5

是的,看看這個:http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

關鍵詞是__VA_ARGS__(可變參數宏):

宏可以聲明爲接受可變數量的參數就像一個功能。定義宏的語法與函數的語法相似。下面是一個例子:

#define eprintf(...) fprintf (stderr, __VA_ARGS__) 
+0

我讀過這個。這不是我想要的。這要求宏體具有采用__VA_ARGS__的函數。 – richard