für einen Tippfehler, lasse ich die a
drin. Als ich zu kompilieren ging, berichtete der Compiler:Sollte int a, f() {} kompilieren?
missing a ',' between declaration of 'a' and 'f'
Code:
int a
f(void)
{
}
und war sehr surpresing, da ich noch nie so eine beliebige Fehlermeldung bekommen habe, und ich wusste nicht, konnte ich setzen ein Komma gibt und es nur gut zusammengestellt (in mehr als einem Compiler, den ich getestet):
int a,
f(void)
{
}
aber natürlich war es nicht meine Absicht, aber int f(void){}
statt. Ich gebe einen Versuch in einem anderen Compiler, aber es hat nicht funktioniert und berichtet einen Syntaxfehler wie folgt aus (in Klirren):
error: expected ';' after top level declarator.
Meine Frage ist: was ist richtig? es sollte oder sollte nicht kompilieren? Was sagt der Standard über dieses Verhalten?
Ich werde es nicht verwenden, da es ein bisschen hässlich ist, Variable und Funktionen durch Komma getrennt zu setzen (genau wie es für einen Funktionsprototyp ist). Ich bin nur Neugierig.
EDIT: hinzugefügt void
in Funktionsparameter. Eigentlich wollte ich eine Funktion mit leeren Parametern schreiben
Die früheren _seems_ gültig C89, und die letztere ungültig. Für C99 bin ich mir ziemlich sicher, beide sind ungültig (und gcc weigert sich, mit '-std = c99 -pedantic' zu kompilieren). 'int a, f();' (wobei letzteres eine Funktionsdeklaration ist (Funktion, die eine unbestimmte Anzahl von Argumenten entgegennimmt, die 'int' zurückgibt) ohne Definition) wäre jedoch gültig C99. Welchen Standard interessieren Sie? – mafso
Gut zu wissen, werde ich meinen Kommentar entfernen, wie es wirklich nicht mehr als Ihre sagen, aber irgendwie in der Neu-Lesung sagten Sie es sauberer als ich. –
entfernt meins zu – Jack