假设我有一个C++预处理器宏定义如下:
#define X(s) std::cout << #s
Run Code Online (Sandbox Code Playgroud)
如果我直接使用它:
int main() {
X( hello );
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,并在控制台上打印"hello".
如果我定义另一个调用它的宏:
#define Y X( hello )
#define X(s) std::cout << #s
int main() {
Y;
}
Run Code Online (Sandbox Code Playgroud)
它仍然有效.
但是,如果我尝试X从两个或更多不同的宏组成调用,我会得到一大堆错误:
#define A X(
#define B hello
#define C )
#define X(s) std::cout << #s << '\n'
int main()
{
A B C;
}
Run Code Online (Sandbox Code Playgroud)
请参阅输出:http://cpp.sh/5ws5k
为什么我不能从两个或多个宏扩展组成一个宏调用,不预处理器递归扩展它们?