Korrektes C++ Programm?
-
also main(void) wäre nicht teil des Standards?
-
AFAIK nicht. Ich beziehe mich damit auf eine Aussage aus einem anderen thread. Ich weiss jedoch nicht mehr wers gepostet hat. War auf jedenfall einer von den koriphäen hier.
-
main()
eigentlich auch nicht, das geht nur in C89. C99 und C++98 verlangen, dass der Typ einer Funktion explizit deklariert wird (in C89 wäre das äquivalent zu int main()). Was int main(void) angeht, zumindest erklärt es der C++-Standard nicht als standardkonform. Ich bin nicht mal sicher, ob int foo(void) im C++-Standard noch erlaubt ist, jedenfalls macht es in C++ (anders als in C) nichts anderes als int foo().
Wie gesagt, C++ definiert
int main(); int main(int argc, char *argv[]);
C99 dagegen definiert
int main(void); int main(int argc, char *argv[]);
In beiden Fällen läuft es auf int als Rückgabewert und entweder keine Parameter oder int als ersten und char *[] als zweiten Parameter hinaus.
-
> Das letzte Ereigniss das C++ seinen heutigen Charakter verliehen hat war 1997.
Das habe ich bisher gedacht - anscheinend wurde C++ doch noch ein paar mal überarbeitet - wann war das letzte "Update"?
-
Vertexwahn schrieb:
also main(void) wäre nicht teil des Standards?
Geht es um das void oder um den fehlenden Rückgabetyp? Ersteres ist erlaubt, letzteres nicht.
-
> Geht es um das void oder um den fehlenden Rückgabetyp? Ersteres ist erlaubt, letzteres nicht.
es ging eigentlich um beides
ist jetzt "int main(void)" standardkonform...?
0xdeadbeef meinte dass das C99 ist und eine Non-Standard-Erweiterung
-
Vertexwahn schrieb:
> Das letzte Ereigniss das C++ seinen heutigen Charakter verliehen hat war 1997.
Das habe ich bisher gedacht - anscheinend wurde C++ doch noch ein paar mal überarbeitet - wann war das letzte "Update"?
Es gab ein paar Klarstellungen, aber der Standard steht seit 1998. Allerdings gab es 1998 noch keinen Compiler, der den Kram vollständig unterstützte - sowas zu implementieren braucht halt ne Weile.
Was int main(void) angeht, der C++-Standard erklärt ausdrücklich int main() und int main(int argc, char *argv[]) als Formen von main, die jeder Compiler übersetzen können muss. Ein Compiler darf auch mehr akzeptieren, und die meisten Compiler werden wohl auch int main(void) fressen, aber um größtmögliche Portabilität zu garantieren, sollte man sich an die beiden im Standard genannten Formen halten (ich sehe auch keinen Grund, das nicht zu tun).
-
int main(void) ist aber exakt äquivalent zu int main() (jedenfalls in C++)
-
Es mag vom Effekt her gleich sein, aber der Standard behandelt main nun mal gesondert und schreibt diese beiden Signaturen als zwingend gültig für alle Compiler vor. Bei entsprechend strenger Auslegung könnte ein Compilerbauer also int main(void) ablehnen - zum Beispiel, wenn jemand sowohl Informatik als auch Jura studiert hat ;).
Ich sage ja nicht, dass das sinnvoll wäre oder dass das wirklich mal jemand tun würde, aber es wäre theoretisch möglich, und ich sehe keinen wirklich guten Grund, int main(void) statt int main() zu schreiben.
-
nur so nebenbei - vielleicht sollte man diesen Beitrag später einmal in die FAQ aufnehmen