Конкатенация поддерживается в 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
^