gpt4 book ai didi

objective-c - 预处理器宏 C/Objective-C

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:28 26 4
gpt4 key购买 nike

你好,我正在尝试制作一个获取参数并尝试向其添加 postFix 的宏。

#define myPostFix HelloWorld
#define macro(x) x ##myPostFix
#define CAlgThreadHandleObject macro(CAlgThreadHandleObject)

预期的行为是得到

CAlgThreadHandleObjectHelloWorld

我实际得到的是:

CAlgThreadHandleObjectmyPostFix 

请问 Some1 可以帮助我获得预期的行为吗?请注意,myPostFix 是我必须在项目 GCC 定义中定义的东西,它应该因项目而异。

最佳答案

尝试:

#define myPostFix HelloWorld
#define macro_2(x, y) x##y
#define macro_1(x, y) macro_2(x, y)
#define macro(x) macro_1(x, myPostFix)
#define CAlgThreadHandleObject macro(CAlgThreadHandleObject)

您需要中间 macro_1 来让预处理器替换 myPostFix 赋值,然后是 macro_2 来连接字符串。此解决方案允许您将 myPostFix 分配给您想要的值。

为了阐明预处理器和符号替换的工作原理,考虑到预处理翻译阶段不是对参数递归的,因此翻译需要通过一次以上的强制参数扩展来扩展所有参数.
在我们的例子中:

  1. CAlgThreadHandleObject 扩展为:macro(CAlgThreadHandleObject)
  2. macro(CAlgThreadHandleObject) 扩展为:macro_1(CAlgThreadHandleObject, myPostFix)
  3. macro_1 扩展为:macro_2(CAlgThreadHandleObject, HelloWorld)
  4. 最后一个 macro_2 扩展为:CAlgThreadHandleObjectHelloWorld

关于objective-c - 预处理器宏 C/Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977215/

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