在Xcode中,我可以在宏中使用##吗?
在MSVC中我可以写:
#define FOO(_var) int foo##_var## = 1
FOO(bar);
foobar++;
在Mac上(编辑:使用GCC编译),相同的代码给出了错误“粘贴”foobar“和”=“没有给出有效的预处理令牌。##不支持xcode的?
答案 0 :(得分:10)
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
^