Xcode&;预处理器##

Xcode&;预处理器##,xcode,preprocessor,Xcode,Preprocessor,在Xcode中,我可以在宏中使用## 在MSVC中,我可以写: #define FOO(_var) int foo##_var## = 1 FOO(bar); foobar++; 在Mac(编辑:使用GCC编译)上,相同的代码给出了错误“粘贴”foobar,“=”没有给出有效的预处理令牌。xcode中不支持##吗?GCC和Clang中支持串联。xcode不是编译器;如果您发布类似的错误,请检查GCC、LLVM-GCC或Clang的版本(““LLVM编译器”),因为它们的行为可

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

在MSVC中,我可以写:

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

    FOO(bar);
    foobar++;

在Mac(编辑:使用GCC编译)上,相同的代码给出了错误“粘贴”foobar,“=”没有给出有效的预处理令牌。xcode中不支持##吗?

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

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

请尝试使用
#定义FOO(_var)int FOO###u 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下。谢谢Nicholas。