[Gelöst] Grundfrage zur Hauptfunktion main()
-
Hallo,
bin je gerade dabei C++ zu lernen und mir ist beim "experimentieren" eine recht simple Grundfrage aufgefallen wo ich leider keine "genaue" Erklärung für gefunden habe.
Evtl. könnte hier mir jemand dies Beantworten?
Die Hauptfunktion wird ja in den meisten Beispielen wie folgt dargestellt:int main(){}oder auch mit:
void main(){}Problemlos lies sich auch dies Kompilieren:
main(){}Ich habe diese Erklärung dazu gefunden bzw. gelesen:
Bedeutet dass das Programm main() nach Beendigung eine Zahl vom Typ int (abküzung für integer = englisch für ganze Zahl) an das Betriebssystem zurück gibt.
Also dachte ich mir man könnte ja wenn man weiß das ein Ergebnis eine Fließkommazahl ist auch folgendes Verwenden:
float main()Hier bekomme ich aber beim Kompilieren folgende Meldung:
egle@Core2Quad:~/c++$ g++ test.cpp -o test test.cpp:1:12: Fehler: »::main« muss »int« zurückgeben egle@Core2Quad:~/c++$Bedeutet dies nun das main() immer nur ganze Zahlen erwartet?
Wenn ja könnte man eigentlich dann nicht gleich bei jedem Programm
das ganze ohne das int benutzen also nur mittels main() ?Oder liegt dies nur an meinem GCC Compiler (unter Linux) und ist also keine c++ Standardisierung?
Zumindest habe ich das auch bei etwas Längeren Code-Beispielen ausprobiert
und dort aus dem "int main()" einfach nur ein "main()" geschrieben und die ausprobierten Beispiele ließen sich Problemlos kompilieren
-
Laut Standard sind die einzigen beiden, erlaubten Varianten
int main()sowie
int main(int argc, char* argv[])
-
EgLe schrieb:
[...]
oder auch mit:void main(){}Das ist falsch.
EgLe schrieb:
Problemlos lies sich auch dies Kompilieren:
main(){}Das ist ebenfalls falsch. In C++ gibts kein default int.
EgLe schrieb:
Bedeutet dies nun das main() immer nur ganze Zahlen erwartet?
Wenn ja könnte man eigentlich dann nicht gleich bei jedem Programm
das ganze ohne das int benutzen also nur mittels main() ?Der C++ Standard schreibt vor, dass main einen int returned. Den Rückgabetyp wegzulassen, geht in C++ nicht.
-
314159265358979 schrieb:
Laut Standard sind die einzigen beiden, erlaubten Varianten
int main()sowie
int main(int argc, char* argv[])Genaugenommen sind das die einzigen beiden Varianten die jeder Compiler unterstützten muss. Der C++ Standard erlaubt auch weitere, compilerspezifische Varianten, solange der Rückgabetyp int ist.
-
Warum ist es denn so im Standard geschrieben? Was wenn main() nicht returned? Was ist der Sinn immer int zurückgeben zu müssen?
-
Tim schrieb:
Warum ist es denn so im Standard geschrieben?
Damit es standardisiert ist.
Was wenn main() nicht returned?
Dann hört das Programm nicht auf. Na und?
Was ist der Sinn immer int zurückgeben zu müssen?
Damit der Aufrufer weiß, was zurück gegeben wird.
Diese Angaben gelten nämlich nur "hosted implementations", d.h. für Programme die irgendwie in einer nicht näher spezifizierten Umgebung (das ist i.A. ein Betriebssystem) laufen. Diese Umgebung muss natürlich wissen, wie ein Programmaufruf aussieht und was sie da zurück bekommt. Für eine "freestanding implementation" ist die Form der main-Funktion, ja sogar die Existenz einer main-Funktion, gänzlich implementation defined.
-
Stimmt, dass es beim freestanding environment komplett frei ist hab ich überlesen. Ich dachte auch da wir ein int gefordert.
-
main(){}Diese Variante stammt aus der vor C89 Zeit. Wenn euch K&R C-Quelltext von vor 1990 vorliegt, seht ihr so etwas.
C++ von vor 1990? Da existiert wohl nur noch wenig Quelltext, der die Zeiten überdauert hat

Das zur Geschichte.
Nehmt heute:int main( ...MfG f.-th.
-
f.-th. schrieb:
main(){}Diese Variante stammt aus der vor C89 Zeit.
Das war auch noch in C89 erlaubt.
C++ von vor 1990? Da existiert wohl nur noch wenig Quelltext, der die Zeiten überdauert hat

Oh doch. Manche schreiben sogar heute noch C++ von vor 1990

-
Ich hab mir mal vor Jahren den ersten Borland C++ Compiler angesehen und versucht ein paar Programme mit dem zu erstellen.
Ob ihr den Quelltext-Stil von damals wirklich sehen wollt
-
Hallo,
Hmm, hätte nicht gedacht das eine so "simple" Frage doch in dieser kurzen Zeit
so reichlich an Antworten Liefert.Vielen Dank für eure Antworten

Also kann ich davon ausgehen das der Standard im heutigen C++11?
nur die beiden Programmaufrufe erlauben:int main()int main(int argc, char* argv[])Die anderen Varianten die sich aber auch Kompilieren lassen sind dann eher mit
der Rückwärts-Kompatibilität des GNU-Compiler zu den älterem C++ zu erklären.Durch die vielen verschiedenen "online Tutorials" kam ich da echt ins Grübeln,
und ich will ja wenn ich schon frisch C++ lerne auch den neusten und somit auch
den "recht aktuellen" C++-Standard erlernen.Habe zwar auch schon gelesen das es erst Kürzlich wieder eine neue
Standardisierung gab, aber davon wird es ja für einen Anfänger wohl kaum
schon eine deutsche ggf. Kostenfreie Version zu haben sein
Also nochmals recht herzlichen Dank für eure Hilfe.
-
EgLe schrieb:
Habe zwar auch schon gelesen das es erst Kürzlich wieder eine neue
Standardisierung gab, aber davon wird es ja für einen Anfänger wohl kaum
schon eine deutsche ggf. Kostenfreie Version zu haben sein
Hmm, theoretisch wird es wohl irgendwo eine DIN Übersetzung geben. Aber kostenlos ist weder das endgültige Dokument von DIN noch ISO. Wohl aber die späten Drafts, bei denen kaum noch Änderungen hinzugekommen sind:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
Es wird beim Programmieren jedoch allgemein davon ausgegangen, dass du Englisch Lesen und vielleicht auch ein bisschen Schreiben kannst. Nur mit Deutsch kommst du nicht einmal an die fortgeschrittenen Bücher und Webseiten, geschweige denn an heiße neue Entwicklungen.