Warum deklarieren main als ein array zusammenstellen?

Sah ich ein code-snippet auf CodeGolf vorgesehen, da ein compiler-Bombe, wo main ist deklariert als ein großes array. Ich habe versucht, die folgenden (nicht die Bombe) version:

int main[1] = { 0 };

Scheint es zu kompilieren einwandfrei unter Clang und mit nur ein warning unter GCC:

warning: 'main' ist in der Regel eine Funktion [-Wmain]

Die resultierende binäre ist natürlich Müll.

Aber warum tut man es kompilieren überhaupt? Ist es überhaupt erlaubt, die von der C-Spezifikation? Der Abschnitt, den ich denke, relevant ist, sagt:

5.1.2.2.1 Programmstart

Die Funktion, die aufgerufen wird bei Programm-Start ist mit dem Namen main. Die Umsetzung erklärt kein Prototyp für diese Funktion. Es muss festgelegt werden mit dem Rückgabetyp int und ohne Parameter [...] oder mit zwei Parametern, [ ... ] oder in einem anderen von der Implementierung definierte Art und Weise.

Bedeutet "etwas andere Umsetzung definierter Weise" gehören ein globales array? (Es scheint mir, dass die Skillung bezieht sich noch auf eine Funktion.)

Wenn nicht, ist es eine compiler-Erweiterung? Oder eine Funktion des toolchains, das dient einem anderen Zweck, und Sie beschlossen, es durch das frontend?

Schreibe einen Kommentar