gpt4 book ai didi

c++ - 使用预处理器宏组合另一个宏调用

转载 作者:太空狗 更新时间:2023-10-29 20:23:07 24 4
gpt4 key购买 nike

假设我有一个 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

为什么我不能从两个或多个宏扩展中组成一个宏调用,预处理器不会递归地扩展它们?

最佳答案

Why can't I compose a macro call from two or more macro expansions, doesn't preprocessor expand them recursively?

您可以编写宏。预处理器确实递归地展开宏。

但是,它不会首先扩展宏宽度。它首先扩展它们的深度。

您遇到问题是因为您希望预处理器先扩展宏宽度。

您可以在 C++11 标准的16.3.4 重新扫描和进一步替换中阅读有关递归宏扩展的更多信息。

关于c++ - 使用预处理器宏组合另一个宏调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com