Offensichtlich verursacht der Compiler über das @
Zeichen einen Syntaxfehler (außer es ist ein Kommentar oder ein String-Literal). Wenn das Zeichen jedoch z.B. innerhalb eines #if 0
Blocks, ist das Programm technisch gültig?Ist das @ -Zeichen in der C-Quelle erlaubt?
Ich versuchte dies:
#define NOTHING(x)
int main()
{
NOTHING(@@@@);
return 0;
}
mit -pedantic -Wall -Wextra
, sowohl auf gcc und Klirren und es gab keine Warnungen. Ich bin mir nicht sicher, ob das garantiert funktionieren wird, oder ob sie keine spezielle Warnung dafür haben.
Ich habe nichts im Standard gefunden, der die eine oder andere Art sagt, die besorgniserregend ist. Ich möchte ein Tool nicht darauf aufbauen, nur um herauszufinden, dass ein standardkompatibler Compiler daran erstickt.
„@ ist ein gültiger Präprozessor-Token“ - das ist der Schlüssel hier, und der entsprechende Standard-Teil scheint zu sein, [C11 Abschnitt 6.4] (http://port70.net/~nsz/c/c11/n1570.html#6.4), wobei die Definition von 'Preprocessing-Token' jedes Nicht-Whitespace-Zeichen enthält, das nicht mit den anderen Vorverarbeitungstokenkategorien übereinstimmt. – user2357112
Danke! Das beantwortet meine Frage vollständig. – mtijanic