【问题标题】:Xcode & preprocessor ##Xcode & 预处理器##
【发布时间】:2010-12-08 11:57:18
【问题描述】:

在 Xcode 中,我可以在宏中使用 ## 吗?

在 MSVC 中我可以写:

#define FOO(_var) int foo##_var## = 1

    FOO(bar);
    foobar++;

在 Mac 上(edit: 使用 GCC 编译)相同的代码给我错误“粘贴“foobar”和“=”没有给出有效的预处理令牌。## 不支持xcode?​​p>

【问题讨论】:

    标签: xcode preprocessor


    【解决方案1】:

    GCC 和 Clang 支持串联。 Xcode 不是编译器;如果您发布此类错误,请检查您正在使用的 GCC、LLVM-GCC 或 Clang(“LLVM 编译器”)版本,因为它们的行为可能不同。

    您正在尝试使 = 成为标识符的一部分(即创建一个名为 foobar= 的变量),我认为这不是您想要的。

    改用#define FOO(_var) int foo##_var = 1

    顺便说一句,Clang 给出了更好的错误信息:

    foo.c:4:5: error: pasting formed 'foobar=', an invalid preprocessing token
        FOO(bar);
        ^
    foo.c:1:32: note: instantiated from:
    #define FOO(_var) int foo##_var## = 1
                                   ^
    

    【讨论】:

    • 做到了,我有额外的##,它在 MSVC 中编译得很好,但在 GCC 下没有。谢谢尼古拉斯。
    猜你喜欢
    • 2010-09-19
    • 2011-08-12
    • 2011-08-21
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多