int main(), void und der Rückgabewert
Für die gewöhnlichen Konsolenprogramme dieses Kurses verwendest du int main(). main wird beim Programmstart von der Laufzeitumgebung aufgerufen. Die Laufzeitumgebung ist der unterstützende Code, der unter anderem den Start vorbereitet. Vor main können bereits Initialisierungen stattfinden; main ist deshalb nicht zwingend die erste ausgeführte Maschinenanweisung.
int main(), void und der Rückgabewert#
Einführung · Lektion 5 von 60
Voraussetzungen: Erstes Programm. Lernziel: Du unterscheidest den Programmstart von gewöhnlichen Funktionen ohne Rückgabewert.
Für die gewöhnlichen Konsolenprogramme dieses Kurses verwendest du int main(). main wird beim Programmstart von der Laufzeitumgebung aufgerufen. Die Laufzeitumgebung ist der unterstützende Code, der unter anderem den Start vorbereitet. Vor main können bereits Initialisierungen stattfinden; main ist deshalb nicht zwingend die erste ausgeführte Maschinenanweisung.
Was das int bedeutet#
1int main() {2 return 0;3}int ist der Rückgabetyp. 0 meldet erfolgreiche Beendigung. Der Wert heißt Exitcode oder Beendigungsstatus und kann von einer Shell oder einem anderen Programm ausgewertet werden. In den Kursbeispielen steht return 1; für einen Fehler. Andere konkrete Statuswerte haben nicht überall dieselbe Bedeutung.
Erreicht die Ausführung das Ende von main, entspricht das in C++ einem return 0;. Diese Sonderregel gilt nicht allgemein für selbst geschriebene Funktionen mit einem Rückgabewert.
Warum nicht void main()?#
void bedeutet als Rückgabetyp: Diese Funktion liefert keinen Wert zurück. Für eigene Hilfsfunktionen ist das normal:
1#include <iostream>2 3void begruessen() {4 std::cout << "Hallo!\n";5}6 7int main() {8 begruessen();9 return 0;10}begruessen(); ist ein Funktionsaufruf, der den Körper dieser Funktion ausführt. Danach geht es in main weiter. Eine void-Funktion kann mit return; vorzeitig enden, aber nicht mit return 5; einen Zahlenwert liefern.
Der C++-Standard verlangt für diese Form von main den Rückgabetyp int. void main() ist daher kein portables Standard-C++. Portabel bedeutet hier, ohne herstellerspezifische Erweiterung mit verschiedenen passenden C++-Implementierungen nutzbar. Akzeptiert ein Compiler void main() trotzdem, beweist das keine Standardkonformität. Siehe die Regel zur main-Funktion im C++-Arbeitsentwurf.
Die zweite übliche Form#
1#include <iostream>2 3int main(int argc, char* argv[]) {4 std::cout << "Argumentanzahl: " << argc << '\n';5 if (argc > 1) {6 std::cout << "Erstes eigenes Argument: " << argv[1] << '\n';7 }8}Ein Kommandozeilenargument ist ein beim Programmstart übergebener Text. Bei programm Hallo ist Hallo ein solches Argument. argc zählt die übergebenen Argumenteinträge einschließlich eines vorhandenen Programmeintrags. argv gewährt Zugriff auf die Texte; argv[1] bezeichnet den zweiten Eintrag. Die Syntax mit char* und [] erklären die Kapitel zu Zeigern und Arrays. if führt einen Block nur bei erfüllter Bedingung aus und verhindert hier den Zugriff auf einen fehlenden Eintrag.
Eine Bibliothek definiert üblicherweise kein main. Für besondere Umgebungen wie bestimmte Mikrocontroller gelten eigene Startvereinbarungen. Die Kursprogramme sind normale ausführbare Programme für eine Betriebssystemumgebung.
Übung#
Wird durch return 7; die Zahl 7 ausgegeben?
Lösung
Nein. Dafür brauchst du eine Ausgabeanweisung. return übermittelt den Beendigungsstatus. In PowerShell kannst du nach dem Programmaufruf $LASTEXITCODE ansehen.
Weiterlernen#
Zurück: Kommentare und lesbarer Quelltext · Kursübersicht · Weiter: Vom Quelltext zum Programm: Build und Fehlermeldungen
Kommentare 0
Kommentare sind für diese Seite deaktiviert.