gpt4 book ai didi

C 预处理器宏扩展

转载 作者:行者123 更新时间:2023-12-04 16:07:07 25 4
gpt4 key购买 nike

我很难理解 C 预处理器如何在以下上下文中应用重写规则。我有以下宏:

#define _A(x) "A" _##x
#define _B(x) "B" _##x
#define X(x) _##x

想法是这些宏中的每一个都使用连接来创建一个新的表达式,它本身可以是一个宏——如果它是一个宏,我希望它被扩展:

现在,正如我所料,以下展开:

X(x)       expands to _x
X(A(x)) expands to "A" _x
X(A(B(x))) expands to "A" "B" _x

然而,一旦同一个宏被多次使用,扩展就会停止:

X(A(A(x)))       expands to "A" _A(x), expected "A" "A" _x
X(B(B(x))) expands to "B" _B(x), expected "B" "B" _x
X(A(B(A(x)))) expands to "A" "B" _A(x), expected "A" "B" "A" _x
X(A(B(A(B(x))))) expands to "A" "B" _A(B(x)), expected "A" "B" "A" "B" _x

我猜这里有某种“只能扩展同名宏一次”的规则?我可以做些什么来让宏以我想要的方式扩展?

最佳答案

当我想进行宏扩展时,我通常使用这个图,它是我使用标准的 6.10.3 节构建的。希望对你有帮助...

enter image description here

正如 Toby 已经提到的,嵌套的宏不会被递归扩展。

关于C 预处理器宏扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375238/

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