ho cercato un po 'di pre-elaborazione scomoda e si avvicinò con qualcosa di simile:errore preprocessore quando si definisce =
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
gcc mi dà gli errori:
test.c: In function ‘main’:
test.c:10:8: error: expected expression before ‘=’ token
test.c:12:8: error: expected expression before ‘=’ token
perché?
Possibile duplicato di [Qual è il peggiore utilizzo di macro/pre-processore nel mondo reale?] (Http://stackoverflow.com/questions/652788/what-is-the-worst-real -world-macros-pre-processor-abuse-youve-ever-come-across) Sto solo scherzando, bella domanda. –
Eseguendo questo attraverso il preprocessore, i test si trasformano in 'if (x = = 6)'. Non sono sicuro del motivo per cui lo spazio è inserito ... presumibilmente qualcuno che conosce una delle specifiche C molto meglio di me arriverà ... – cdhowie
Il preprocessore si occupa di token, logicamente con gli spazi che separano i token. Quando tokenizza 'if (x = SIX)', ha 'if',' (',' x', '=', e 'SIX'. Quando la macro espande' SIX', ha token extra '=' e '6' .Ma due token adiacenti' = 'non sono la stessa cosa di un token' == '(e sono in effetti una sintassi C non valida) - quindi l'errore di compilazione –