gpt4 book ai didi

c - 如何评估嵌套的预处理器宏

转载 作者:太空狗 更新时间:2023-10-29 17:17:22 25 4
gpt4 key购买 nike

假设我想选择某个预处理器指令的行为,该指令在编译时评估常量字符串和另一个宏的结果的串联。

#define CASE1 text1
#define CASE2 text2
#define CASE3 text3
#define SCENARIO 3
/** the following won't work - for examplification purposes only**/
#define FUNCTION CASE##SCENARIO

/** whenever I write FUNCTION, I expect to see text3 **/

我很难想出一个可行的解决方案,因为预处理器是一次性的野兽。这甚至可行吗?

最佳答案

这是可能的,你只需要添加一些额外的宏层。关键是,当您使用标记粘贴运算符## 时,预处理器不会扩展其操作数。但是,如果您添加另一层宏,预处理器将扩展这些参数。例如:

#define CASE1 text1
#define CASE2 text2
#define CASE3 text3
#define SCENARIO 3

#define TOKENPASTE_HELPER(x, y) x ## y
#define TOKENPASTE(x, y) TOKENPASTE_HELPER(x, y)
#define FUNCTION TOKENPASTE(CASE, SCENARIO)

当预处理器扩展FUNCTION时,它会扩展TOKENPASTE。当它扩展 TOKENPASTE 时,它扩展了它的参数(因此 SCENARIO 被替换为 3),因为它的两个参数都不是 token 的操作数 -粘贴运算符。接下来,它扩展 TOKENPASTE_HELPER,它执行实际的 token 粘贴以生成 CASE3。最后,它展开 CASE3 宏得到 text3

关于c - 如何评估嵌套的预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13074432/

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