【发布时间】:2016-01-06 15:54:11
【问题描述】:
假设我有一个 C++ 预处理器宏定义如下:
#define X(s) std::cout << #s
如果我直接使用的话:
int main() {
X( hello );
}
它按预期工作,并且在控制台上打印“hello”。
如果我定义另一个调用它的宏:
#define Y X( hello )
#define X(s) std::cout << #s
int main() {
Y;
}
它仍然有效。
但是,如果我尝试从两个或多个不同的宏组合对 X 的调用,则会收到一大堆错误:
#define A X(
#define B hello
#define C )
#define X(s) std::cout << #s << '\n'
int main()
{
A B C;
}
查看输出:http://cpp.sh/5ws5k
为什么我不能从两个或多个宏扩展组成一个宏调用,预处理器不递归地扩展它们?
【问题讨论】:
-
您应该阅读描述C++ preprocessor 的文档,可能是C++11 或C99 标准。它不像你在做梦那样工作。
-
我不知道你想在这里实现什么......
标签: c++ c-preprocessor