从 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
将如何计算?
如果在您尝试实例化 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
之后声明。重要的是当你 use A
B
时已经声明了。
在您的示例中要注意的另一个重要想法是,X
将被计算两次。例如,如果您这样调用 MAC3
:
i = 0;
MAC3(i++, 1);
最后i
的值将是2
(假设MAC1
和MAC2
都使用一次X
)。
如果我定义了两个宏:
#define MAC1(X) {something here}
#define MAC2(X,Y) {something here}
并像这样创建第三个:
#define MAC3(X,Y) MAC1(X); MAC2(X,Y)
能否请您说明如果在代码中调用 MAC3
将如何计算?
如果在您尝试实例化 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
之后声明。重要的是当你 use A
B
时已经声明了。
在您的示例中要注意的另一个重要想法是,X
将被计算两次。例如,如果您这样调用 MAC3
:
i = 0;
MAC3(i++, 1);
最后i
的值将是2
(假设MAC1
和MAC2
都使用一次X
)。