C / C ++阻止宏内部的宏扩展

时间:2014-11-28 11:08:16

标签: c++ macros

让我们考虑一下:

#define PARENTHESIS1 (
#define PARENTHESIS2 )
#define macro_test_0(arg1, arg2) int arg1 arg2
#define macro_test_1(arg1, arg2) macro_test_0(arg1, arg2)

macro_test_0(PARENTHESIS1, PARENTHESIS2 ;) //->works fine
macro_test_1(PARENTHESIS1, PARENTHESIS2 ;) //doesn't work

对于macro_test_1我有错误消息:"宏参数不匹配","提供给类似函数的调用方法的参数太少","使用未声明的标识符' ; macro_test_0' "

事情是,对于macro_test_0,示例给出:

int ( ) ;

这没关系,但是macro_test_1示例给出了(如果我正确的话):

macro_test_0((,) ;)

这显然是错误的。我希望宏的arg1和arg2能够阻止扩展,以便保持:

macro_test0(PARENTHESIS1, PARENTHESIS2 ;)

我猜它与宏扩展顺序有关,但有没有办法或技巧来实现这一目标?我尝试了一些事情,比如人工(即无用)参数的连接,以在宏调用期间延迟扩展,但没有成功。

1 个答案:

答案 0 :(得分:0)

我不知道你使用哪个编译器或IDE。

但是对于visual studio 2012:两行都在预处理后生成相同的代码

int ( ) ; 
int ( ) ; 

for vs:

'src file'properties - > C / C ++ /预处理器 - >预处理到文件

选项将在预处理到文件后输出代码

GCC有类似的编译选项。