你好,我正在尝试制作一个获取参数并尝试向其添加 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
分配给您想要的值。
为了阐明预处理器和符号替换的工作原理,考虑到预处理翻译阶段不是对参数递归的,因此翻译需要通过一次以上的强制参数扩展来扩展所有参数.
在我们的例子中:
CAlgThreadHandleObject
扩展为:macro(CAlgThreadHandleObject)macro(CAlgThreadHandleObject)
扩展为:macro_1(CAlgThreadHandleObject, myPostFix)
macro_1
扩展为:macro_2(CAlgThreadHandleObject, HelloWorld)
- 最后一个
macro_2
扩展为:CAlgThreadHandleObjectHelloWorld
关于objective-c - 预处理器宏 C/Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977215/