Warum kann das Auslassen des expliziten Typs 'int' für einen Parameter in gcc manchmal nicht kompiliert werden?

Wenn Sie Variablen in C deklarieren, können Sie den Typ manchmal weglassen, wenn Sie eine deklarieren möchtenint.

Warum kann das Weglassen des expliziten 'int'-Typs für einen Parameter in gcc nicht mit anderen nicht-int-Parametern kompiliert werden, sofern dies nicht im K & R-Stil deklariert wurde?

Dieser Code generiert einen Fehler:

main(argc, char *argv[])
{
  /* . . . */
}

Mit folgender Ausgabe:

$gcc XXX.c -oXXX
XXX.c:X:X: error: expected ‘)’ before ‘char’
 main(argc, char *argv[])
            ^

Wenn ich jedoch K & R-Stiltypen für die Parameter schreibe, kann ich auf die Angabe eines verzichtenint Typ für den ersten Parameter:

main(argc, argv)
char *argv[];
{
  /* . . . */
}

Und das kompiliert gut.

Ich vermute, der Grund dafür ist, dass bei der Erstellung des ersten C-Standards entschieden wurde, dass die K & R-Notation für automatische Int vollständig von der neueren Syntax für Funktionsparameter getrennt sein sollte, zumal die Notation für automatische Int zu dem Zeitpunkt, als der Standard zusammengezogen wurde, war wahrscheinlich schon als schlechte Notation.

Mein Interesse an diesen Regeln ist akademisch, ich schreibe im Allgemeinen nicht dieses C im alten Stil.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage