我在通話宏觀工作,複雜的宏零個參數
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__))
,要求時,
CALL(print,2,3,4,5);
增加2 3 4 5到鏈表(,超載這樣做),並呼籲打印預計鏈接列表,如預期般運作如何有一些不需要參數的呼叫,
CALL(HeapSize);
它仍然需要一個鏈接列表,但一個空的,以上不起作用,我試圖想出一個宏,可以與任何一種風格工作?
編輯:挖通過量gcc的文檔,我發現,加入##之前VA_ARGS刪除,當沒有爭論,但與我不能嵌套宏,
CALL(print,CALL(HeadSize));
這將導致CALL沒有定義的錯誤如何,如果我分開它的工作電話
根據傳遞參數的數量,您可以將'CALL'委託給不同的宏。我演示瞭如何做到這一點[在另一個問題的答案](http://stackoverflow.com/questions/5355241/generating-function-declaration-using-a-macro-iteration/5355946#5355946)。這不需要任何實現特定的黑客。 – 2011-05-05 00:30:40
也見http://stackoverflow.com/questions/5588855/standard-alternative-to-gccs-va-args-trick – 2012-02-09 03:26:21