Xcode и препроцессор ##

В Xcode я могу использовать ## в макросе?

В MSVC я могу написать:

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

    FOO(bar);
    foobar++;

На Mac (изменить: при компиляции с помощью GCC) тот же код выдает ошибку «Вставка «foobar» и «=» не дает допустимого токена предварительной обработки. ## не поддерживается в xcode?


person Chris Masterton    schedule 08.12.2010    source источник


Ответы (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
                               ^
person Nicholas Riley    schedule 08.12.2010
comment
Это сделало это, у меня был дополнительный ##, который отлично скомпилировался в MSVC, но не в GCC. Спасибо Николай. - person Chris Masterton; 08.12.2010