Ich möchte die bereits gegebenen Antworten unter Berufung auf die tatsächlichen Sprachstandards ergänzen.
Ist 'int main;' ein gültiges C-Programm?
Kurze Antwort (meiner Meinung nach): Nur wenn Ihre Implementierung eine "freistehende Ausführungsumgebung" verwendet.
Alle folgenden Zitate aus C11
5. Umwelt
Eine Implementierung übersetzt C-Quelldateien und führt C-Programme in zwei Datenverarbeitungssystemumgebungen aus, die als Übersetzungsumgebung und Ausführungsumgebung [...] bezeichnet werden.
5.1.2 Ausführungsumgebungen
Es werden zwei Ausführungsumgebungen definiert: freistehend und gehostet. In beiden Fällen erfolgt der Programmstart, wenn eine bestimmte C-Funktion von der Ausführungsumgebung aufgerufen wird.
5.1.2.1 Freistehende Umgebung
In einer freistehenden Umgebung (in der die Ausführung des C-Programms ohne Nutzen eines Betriebssystems erfolgen kann) sind Name und Typ der beim Programmstart aufgerufenen Funktion implementierungsdefiniert.
5.1.2.2 Gehostete Umgebung
Eine gehostete Umgebung muss nicht bereitgestellt werden, muss jedoch den folgenden Spezifikationen entsprechen, falls vorhanden.
5.1.2.2.1 Programmstart
Die beim Programmstart aufgerufene Funktion heißt main . [...] Sie muss mit einem Rückgabetyp von int und ohne Parameter [...] oder mit zwei Parametern [...] oder gleichwertig oder auf eine andere implementierungsdefinierte Weise definiert werden.
Von diesen wird folgendes beobachtet:
- Ein C11-Programm kann eine freistehende oder eine gehostete Ausführungsumgebung haben und gültig sein.
- Wenn es eine freistehende hat, muss es keine Hauptfunktion geben.
- Andernfalls muss es eines mit einem Rückgabewert vom Typ int geben .
In einer freistehenden Ausführungsumgebung würde ich argumentieren, dass es sich um ein gültiges Programm handelt, das keinen Start zulässt, da dafür keine Funktion vorhanden ist, wie in 5.1.2 erforderlich. In einer gehosteten Ausführungsumgebung kann Ihr Code zwar ein Objekt mit dem Namen main einführen , aber keinen Rückgabewert bereitstellen. Daher würde ich argumentieren, dass es in diesem Sinne kein gültiges Programm ist, obwohl man auch vorher argumentieren könnte, wenn das Programm dies nicht ist soll ausgeführt werden (on möchte möglicherweise nur Daten bereitstellen), dann erlaubt es einfach nicht, genau das zu tun.
Ist 'int main;' ein gültiges C ++ - Programm?
Kurze Antwort (meiner Meinung nach): Nur wenn Ihre Implementierung eine "freistehende Ausführungsumgebung" verwendet.
Zitat aus C ++ 14
3.6.1 Hauptfunktion
Ein Programm muss eine globale Funktion namens main enthalten, die den festgelegten Start des Programms darstellt. Es ist implementierungsdefiniert, ob ein Programm in einer freistehenden Umgebung erforderlich ist, um eine Hauptfunktion zu definieren. [...] Es muss einen Rückgabetyp vom Typ int haben, ansonsten ist sein Typ implementierungsdefiniert. [...] Der Name main ist nicht anderweitig reserviert.
Im Gegensatz zum C11-Standard gelten hier weniger Einschränkungen für die freistehende Ausführungsumgebung, da überhaupt keine Startfunktion erwähnt wird, während für eine gehostete Ausführungsumgebung der Fall so ziemlich der gleiche ist wie für C11.
Wieder würde ich argumentieren, dass Ihr Code für den gehosteten Fall kein gültiges C ++ 14-Programm ist, aber ich bin sicher, dass es für den freistehenden Fall ist.
Da meine Antwort nur die Ausführungsumgebung berücksichtigt , denke ich, dass die Antwort von dasblinkenlicht ins Spiel kommt, da die Namensverfälschung in der Übersetzungsumgebung vorher erfolgt. Hier bin ich mir nicht so sicher, ob die obigen Zitate so streng eingehalten werden.
gcc -std=c99 -pedantic ...