9.16 Die Hauptfunktion »main()« 

Gemäß dem ANSI-C-Standard muss mindestens eine Funktion in einem Programm den Namen main() besitzen. Diese Funktion ist auch die erste, die beim Programmstart ausgeführt wird.
Geben Sie der main()-Funktion einen anderen Rückgabewert als int, könnte ein C99-Standard-konformer Compiler ein undefiniertes Verhalten zeigen. In einigen (vorwiegend älteren) Büchern finden Sie die main()-Funktion mitunter in folgender Schreibweise:
void main(void) { }
Nach einem älteren C-Standard ist dies auch richtig. Läuft ein Compiler aber nach dem neuesten C99-Standard, wird eine Warnung ausgegeben werden, dass die main()-Funktion einen Rückgabewert erwartet.
Die main()-Funktion lautet (nach dem C99-Standard) richtig:
int main(void) { return 0; // Muss nicht verwendet werden. }
Weiterhin ist auch eine Variante mit zwei Parametern erlaubt:
int main(int argc, char *argv[]) { return 0; // Muss nicht verwendet werden. }
Hinweis |
Um das gleich klarzustellen: Nach dem neuen C99-Standard muss main() nicht mehr mit return beendet werden. |
Näheres zu dieser Schreibweise erfahren Sie später in Kapitel 13, »Kommandozeilenargumente«.
Der Rückgabewert, der der main()-Funktion zugewiesen wird, dient dazu, dass der Startup-Code dem Betriebssystem und der Umgebung mitteilt, ob das Programm ordnungsgemäß beendet wurde oder nicht (abhängig vom Rückgabewert).
In folgenden Fällen liegt ein undefiniertes Verhalten beim Beenden der main()-Funktion vor:
- kein Rückgabewert bei Verwendung von void main()
- Verwendung von _exit() im Programm
Wichtig ist in diesem Zusammenhang die Bedeutung des Begriffs »Startup-Code«. Der Startup-Code wird zu Beginn des Prozesses erzeugt (meist in Assembler) und dient zum Beenden eines Prozesses. Beim Beenden der main()-Funktion wird wieder zum Startup-Code zurückgesprungen. Er ruft dann die exit()-Funktion auf. Die exit()-Funktion führt dann noch einige Aufräumarbeiten aus (z. B. Freigabe des Speicherplatzes von benutzten Variablen des Programms). Zuletzt wird der Prozess mit der Funktion _exit() endgültig beendet. Abbildung 9.3 zeigt den Programmablauf bei Beendigung des Programms.
Abbildung 9.3 Vom Start bis zum Ende eines Programms
Hinweis |
Ein Prozess ist ein Programm während seiner Ausführung. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.