2017-05-05 156 views
2

我有一堆源代碼使用雙括號的一堆宏調用,其中第二個arg和forward是打印語句的可變參數。從C++宏中刪除多餘的括號

DEBUG((1,"here is a debug")) 
    DEBUG((1,"here is %d and %d",42,43)) 

等。

我想寫可打印ARGS 2 -...宏,但我無法弄清楚如何刪除多餘的括號,所以我可以訪問ARGS。

也就是說,這顯然是行不通的:

#define DEBUG(ignore,...) fprintf(stderr,__VA_ARGS__) 

而下面的企圖偷偷摸摸也失敗(與「DEBUG2沒有定義」):

#define DEBUG2(ignore,...) fprintf(stderr,__VA_ARGS__) 
#define DEBUG(...) DEBUG2 

未經編輯的所有宏調用去除parens,我怎樣才能定義一個宏來做到這一點?

回答

2

你可以這樣做:

#define PRINTF(unused, ...) fprintf(stderr, __VA_ARGS__) 
#define DEBUG(arg) PRINTF arg 
+0

是啊 - 我只是想通了這一點,雖然你發佈你的答案首先讓您得到的信用! :) –