Ich implementiere das X-Makro, habe aber ein Problem mit einer einfachen Makroerweiterung. Dieses Makro (siehe unten) wird in mehreren Verwendungsbeispielen für Makros verwendet, indem es in this
Artikel. Der Compiler gibt eine Fehlermeldung aus, aber ich kann gültigen C-Code sehen, indem ich verwende -E
Flag mit dem GCC-Compiler.
Die Makro-X-Liste ist wie folgt definiert:
#define LIST \
X(red, "red") \
X(blue, "blue") \
X(yellow, "yellow")
Und dann:
#define X(a, b) foo.##a = -1;
LIST;
#undef X
Aber der gcc gab folgende Fehlermeldungen aus:
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
Wie gesagt, ich kann gültigen C-Code sehen, indem ich verwende -E
gcc einschalten:
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;;
Was ist ein gültiges Vorverarbeitungstoken? Kann das jemand erklären?
(Bevor Sie sagen “Warum nicht einfach entweder initialisieren oder memset()
?” Es ist nicht mein richtiger Code.)