您好我对C ++中宏的使用有疑问。如果我定义了两个宏并创建第三个这样的宏:
#define MAC1(X) {something here}
#define MAC2(X,Y) {something here}
所以现在第三个定义如下:
#define MAC3(X,Y) MAC1(X); MAC2(X,Y)
如果在代码中调用,请说明如何评估MAC3
答案 0 :(得分:6)
如果您尝试实例化MAC3
时已经声明了MAC1
和MAC2
,那么您将获得
{something here}; {something here}
换句话说,MAC1
和MAC2
会反过来扩展。
但是,如果在使用MAC1
后宣布MAC2
和MAC3
(这是非常不可能),则不会扩展它们。
考虑以下示例:
#define A B
#define B 5
int main()
{
printf("%d", A);
return 0;
};
即使在5
之后声明B
,也会输出A
。重要的是,当您使用 A
B
已经宣布时。
在您的示例中需要注意的另一个重要事项是,X
将被评估两次。例如,如果您像这样致电MAC3
:
i = 0;
MAC3(i++, 1);
最后i
的值为2
(假设MAC1
和MAC2
都使用X
一次。