从C ++中的另一个宏调用多个宏

时间:2015-05-12 16:58:24

标签: c++ macros

您好我对C ++中宏的使用有疑问。如果我定义了两个宏并创建第三个这样的宏:

#define MAC1(X) {something here}
#define MAC2(X,Y) {something here}

所以现在第三个定义如下:

#define MAC3(X,Y) MAC1(X); MAC2(X,Y)

如果在代码中调用,请说明如何评估MAC3

1 个答案:

答案 0 :(得分:6)

如果您尝试实例化MAC3时已经声明了MAC1MAC2,那么您将获得

{something here}; {something here}

换句话说,MAC1MAC2会反过来扩展。

但是,如果在使用MAC1后宣布MAC2MAC3(这是非常不可能),则不会扩展它们。

考虑以下示例:

#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(假设MAC1MAC2都使用X一次。