2012-06-11 71 views
7

可能重複:
How to make a variadic macro (variable number of arguments)我可以有一個C宏接受未定義數量的參數?

我想在基本的C日誌宏它接受類似的參數printf並記錄它們。但是,我希望它是如何記錄的(日誌級別,文件vs stderr等)是在編譯時設置的,而不是運行時;如果我將參數設置爲忽略低級別日誌記錄,則該方法無需執行任何操作,並且有望從代碼中優化。

到目前爲止,我有一個基於編譯時定義的參數定義的宏。如果參數已定義,則日誌記錄將轉至我的日誌方法(以記錄到文件),否則將轉至stderr。但是,我只能將一個字符串傳遞給此宏。日誌方法能夠獲取無限數量的參數,並使用printf語法工作。我想知道是否有一種方法來設置我的宏,因此它會傳遞無限數量的參數到日誌文件中?

因爲我懷疑答案是我不能這樣做是否有另一種方法來實現我想要的基本C(我不能使用C++或增強)。

回答

2

當然可以。 C99支持這個out of the box

的語法看起來像:

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

相關問題