我有以下宏来定义一个遵循特殊命名方案的新函数:
#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*/ }
但是,预处理器总是连接void
,##func_STUB
但我显然希望它保留该位置的空白。
我知道我可以在前面加上一些字符串##func_STUB
,但这不是我想要的。我将如何解决这个问题?
我认为您真正想要的更接近:
#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }
但是您还应该查看此链接的 SO 答案,其中包含有关令牌粘贴操作员行为的一些其他详细信息:
使用标记粘贴 ('##') 或字符串化 ('#') 预处理运算符时要注意的一件事是,您必须使用额外的间接级别才能使它们在所有情况下都能正常工作。
如果您不这样做并且传递给令牌粘贴运算符的项目本身就是宏,那么您将获得可能不是您想要的结果...