2010-12-08 18 views
2

Dans Xcode puis-je utiliser ## dans une macro?Xcode & préprocesseur ##

En MSVC Je peux écrire:

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

    FOO(bar); 
    foobar++; 

Sur Mac (edit: compilation avec GCC) le même code me donne l'erreur « coller "foobar" et "=" ne donne pas valide Jeton de prétraitement. ## n'est pas supporté dans xcode

Répondre

10

La concaténation est supportée dans GCC et Clang Xcode n'est pas un compilateur, si vous postez des erreurs comme ceci, vérifiez quelle version de GCC, LLVM-GCC ou Clang ("Compilateur LLVM") que vous utilisez car leur comportement peut différer

Vous essayez de faire = partie d'un identificateur (c.-à-d. Créer une variable appelée foobar=) que je ne pense pas être ce que vous voulez. À la place, essayez #define FOO(_var) int foo##_var = 1.

Soit dit en passant, Clang donne un peu meilleur message d'erreur:

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 
          ^
+1

qui l'a fait, j'avais supplémentaire ## qui a compilé bien dans MSVC mais pas du CCAG. Merci Nicholas. –