从C ++宏中删除额外的括号

时间:2017-05-05 16:30:27

标签: c++ macros parentheses

我有一堆源代码,它使用双括号表示一堆宏调用,其中第二个arg和forward是一个print语句的变量。

   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,我该如何定义一个可以执行此操作的宏?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

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