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