1

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

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

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

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

4

1 回答 1

7

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

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

但是您还应该查看此链接的 SO 答案,其中包含有关令牌粘贴操作员行为的一些其他详细信息:

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

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

于 2009-12-01T20:58:14.220 回答