main-Funktion
Die main-Funktion bezeichnet den Start eines jeden C-Programmes. Wird die main-Funktion verlassen, so wird das Programm mit dem angegebenen Rückgabewert beendet.
|
|
Das System übergibt jedem C-Programm einen sogenannten Argumentenvektor, welcher mit der erweiterten main-Deklaration angesprochen werden kann:
|
Details
Die main-Funktion darf pro Programm nur einmal definiert werden und sie muss sich im globalen Bereich befinden. Diejenige Datei, in welcher sie definiert wird, wird als das primäre Source-File
bezeichnet. Tradtionsgemäss findet man die main-Funktion am Ende des primären Source-Files. Dies ist üblich, da sämtliche Variablen und Funktionen, die die main-Funktion anspricht, irgendwo deklariert worden sein müssen. Durch die Definition der main-Funktion am Ende der Datei befinden sich somit die benötigten Symbole automatisch irgendwo vor der main-Funktion, und das Schreiben von Prototypen entfällt (was insbesondere bei kleinen Programmen lästig sein kann).
Die main-Funktion kann in den verschiedenen C-Dialekten und bei verschiedenen Programmierern und Programmiererinnen die unterschiedlichsten Formen annehmen, welche grundsätzlich alle äquivalent sind. Folgendes sind die geläufigsten Angaben:
|
Der Rückgabewert der Funktion kann int oder void sein, wobei nur mit dem Rückgabewert int ein Wert zurückgegeben werden darf. Bei void nimmt der Compiler den Standard-Rückgabewert 0 an. ISO-C verlangt den Rückgabewert int.
main-Funktion stets einen Argumentenvektor. Eine parameterlose (oder mit Parameter void deklarierte) main-Funktion ignoriert diesen Vektor. Wird dieser Vektor jedoch benötigt, wird die main-Funktion nach allgemeinem Bewusstsein stets mit den beiden Parametern argc und argv deklariert. Der Parameter argc bezeichnet hierbei den Argument count, die Anzahl Argumente im Vektor. Der Parameter
argv ist der Argument vector, ein Array aus Strings (
char*).
Folgendes Beispiel erläutert den Umgang mit diesen Parametern:
|
|
Das Argument mit Index 0 bezeichnet stets den Namen des Programmes, wie es aufgerufen wurde (dies kann eine absolute oder relative Pfadangabe sein). Dieses Argument ist standartisiert, argc ist somit stets mindestens 1. Alle restlichen Argumente entsprechen den Strings, welche separiert durch Leerzeichen beim Aufruf des Prgrammes angegeben wurden. Es existiert stets noch ein zusätzlicher, letzter Eintrag in dem Array, der standardmässig auf NULL gesetzt ist. Dieser letzte Eintrag wird auch als Sentinel
(Wächter) bezeichnet.
Die letzte Zeile der oben genannten main-Deklarationen zeigt eine eher unbekannte Eigenschaft der main-Funktion. Der optionale dritte Parameter beinhaltet eine Liste der Umgebungsvariablen, welche vom System dem Programm übergeben wird. Dieser Parameter wird normalerweise mit env (environment variables) bezeichnet. Zwar existiert keine vorgegebene Zählervariable, jedoch wird genauso wie bei der Argumentenliste auch dieses Array standardmässig mit einem Sentinel abgeschlossen, das auf NULL gesetzt ist. Folgender Code erläutert den Umgang mit diesem Parameter, wobei die Ausgabe bei jedem Benutzer anders aussehen kann:
|
|
Rückgabewerte
Auch die main-Funktion ist eine ganz normale Funktion und kann je nach Deklaration mit der Rückgabe eines Wertes abgeschlossen werden. Üblicherweise beendet man ein Programm durch den Rückgabewert 0, wohingegen jeder Wert ungleich Null auf einen fehlerhaften Verlauf des Programmes hindeutet. Hierbei ist der Rückgabewert jedoch nicht standartisiert und kann vom Programmierer frei gewählt werden. Dieser Wert ist normalerweise nicht von Bedeutung, kann jedoch beim Arbeiten mit mehreren Prozessen oder Threads eine Zusatzinformation an das aufrufende Programm sein.
Lässt man das Programm in einem Terminal laufen, so wird das Terminal nach Beendigung des Programmes mit einer Meldung wie der folgenden antworten:
|
|
Vorsicht: Der deklarierte Typ der main-Funktion ist standardgemäss int, jedoch haben Tests auf dem System des Autors ergeben, dass der tatsächliche Rückgabetyp einem unsigned char entspricht.