Sto implementando la macro X, ma ho un problema con una semplice espansione di macro. Questa macro (vedi sotto) è utilizzata in diversi esempi di utilizzo di macro, includendo nell'articolo this
. Il compilatore fornisce un messaggio di errore, ma è possibile visualizzare un codice C valido utilizzando il flag -E
con il compilatore GCC.errore: incollare "." e "red" non fornisce un token di preelaborazione valido
La macro X-lista è definita come la seguente:
#define LIST \
X(red, "red") \
X(blue, "blue") \
X(yellow, "yellow")
E poi:
#define X(a, b) foo.##a = -1;
LIST;
#undef X
Ma il gcc dato i seguenti errori messaggi:
lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
Come ho Detto, posso vedere un codice C valido utilizzando lo switch -E
su gcc:
lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
foo.red = -1; foo.blue = -1; foo.yellow = -1;;
Che cos'è un token di preelaborazione valido? Qualcuno può spiegarlo?
(prima di dire "perché non basta un aut inizializzare o memset()
?" Non è il mio vero codice.)
Grazie molto. – Jack
Quindi la sezione "Incollare i token" in [questo articolo] (http://www.cprogramming.com/tutorial/cpreprocessor.html) è semplicemente sbagliata? – Michael
@ Michael Sì, è sbagliato. –