【问题标题】:Force Whitespace in C Macro?C宏中的强制空格?
【发布时间】:2009-12-01 20:56:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c macros c-preprocessor stringification


    【解决方案1】:

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

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

    但您还应该查看this linked SO answer,其中包含有关令牌粘贴操作员行为的一些其他详细信息:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多