[英]Using preprocessor macros to compose another macro call
假设我有一个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
为什么我不能从两个或多个宏扩展组成一个宏调用,不预处理器递归扩展它们?
为什么我不能从两个或多个宏扩展组成一个宏调用,不预处理器递归扩展它们?
你可以编写宏。 预处理器确实递归地扩展宏。
但是,它不会首先扩展宏宽度。 它首先扩展了它们的深度。
您遇到了问题,因为您希望预处理器首先扩展宏宽度。
您可以在16.3.4重新扫描和进一步替换 C ++ 11标准中阅读有关递归宏扩展的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.