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

Calling multiple macros from another macro in C++

如果我定义了两个宏:

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

并像这样创建第三个:

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

能否请您说明如果在代码中调用 MAC3 将如何计算?

如果在您尝试实例化 MAC3MAC1MAC2 都已声明,您将得到

{something here}; {something here}

换句话说,MAC1MAC2 将依次展开。

但是,如果 MAC1MAC2 在您使用 MAC3 之后声明(这种可能性很小),它们将不会展开。

考虑以下示例:

#define A B
#define B 5

int main()
{
    printf("%d", A);
    return 0;
};

它将输出 5,即使 BA 之后声明。重要的是当你 use A B 时已经声明了。

在您的示例中要注意的另一个重要想法是,X 将被计算两次。例如,如果您这样调用 MAC3

i = 0;
MAC3(i++, 1);

最后i的值将是2(假设MAC1MAC2都使用一次X)。