我有以下宏来定义一个遵循特殊命名方案的新函数:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

然而,预处理器总是连接 void##func_STUB 但我显然希望它保留该位置的空白。

我知道我可以在前面添加一些字符串 ##func_STUB, ,但这不是我想要的。我该如何解决这个问题?

有帮助吗?

解决方案

我认为你真正想要的是更接近:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

但你也应该看看 这个链接的答案 其中有一些关于令牌粘贴操作符行为的附加细节:

使用标记粘贴(“##”)或字符串化(“#”)预处理运算符时需要注意的一件事是,必须使用额外的间接级别才能使它们在所有情况下都能正常工作。

如果您不这样做,并且传递给标记粘贴运算符的项目本身就是宏,您将得到的结果可能不是您想要的......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top