Die Programmabarbeitung endet mit dem Ende von main
(durch ein return oder durch Erreichen des Endes des
main-Rumpfs). Wenn z.B. in Fehlersituationen in anderen
Funktionen das Programm
abgebrochen werden soll, kann man die Funktionen
exit(int) und abort(int) verwenden (in stdlib.h
deklariert).
exit gibt noch belegten Speicher frei und schließt
noch offene Dateien, abort dagegen nicht.
Rückgabewert:
Als Rückgabetypen für main sind void und
int erlaubt.
Der int-Wert wird an das
Betriebssystem weitergeleitet und kann dort zum Beispiel als Fehlercode
verwendet werden. Ist kein Fehler aufgetreten, sollte man daher das
Programm mit return 0; beenden.
Ansonsten ist es üblich,
durch die Größe der int-Zahl die
Schwere des Fehlers zu kennzeichnen.
Der Parameter an exit(int) und abort(int) wird genauso
interpretiert.
Die meisten Compiler setzen automatisch ein return 0; am Ende von
main ein, wenn man es vergessen haben sollte. Auch, wenn man als
Rückgabetyp void angibt, wird intern automatisch eine
0 zurückgegeben.
Parameter aus der Aufrufzeile:
Wichtiger als der Rückgabewert sind die Parameter, die main
empfangen kann. Es handelt sich dabei immer um Strings, die
den Angaben hinter dem Programmnamen in der Aufrufzeile des Programms
erscheinen. (Bei
grafischen Benutzeroberflächen und Start durch Anklicken besteht meist auch
eine Möglichkeit, diese Parameter anzugeben, z.B. in einem speziellen
Requester-Fenster).
Die einzelnen Argumente werden durch Spaces voneinander
getrennt -- die Spaces selbst sind dann in den Parametern nicht mehr
enthalten. Sollen Spaces innerhalb eines Arguments vorkommen, muß es
in Anführungszeichen eingeschlossen werden.
Wenn die Werte beispielsweise numerisch interpretiert werden sollen, muß
das Programm eine passende Umwandlung aus den angegebenen Strings
selbst vornehmen.
Beispielsweise könnte eine Aufrufzeile wie folgt aussehen:
- killtabs -i eingabe.dat -o ausgabe.dat -t 8
Die Zeile enthält 7 Argumente, den Namen des Programmes killtabs
mitgezählt. Die weiteren Argumente gehören zwar logisch paarweise
zusammen (z.B. soll -i eingabe.dat bedeuten, daß aus
eingabe.dat gelesen werden soll), diese Interpretation muß aber
das Programm durchführen.
Es sind nur folgende Parameterlisten erlaubt:
- (void) // Parameter werden ignoriert
(int argc, char *argv[]) // Anzahl Parameter, Array der Parameter
(int argc, char **argv) // [["]]aquivalent zum 2. Fall
Die Parameternamen sind natürlich nicht so vorgeschrieben, haben
sich aber eingebürgert -- sie stehen für argument count bzw.
argument vector.
- argc gibt die Anzahl der übergebenen Argumente an, den
Programmnamen mitgezählt.
- argv ist ein Array von Strings, die nacheinander den
Argumenten der Aufrufzeile entspre-
  chen.
argv[0] ist also immer der Programmname (eventuell vom
Betriebssystem mit absolutem Pfad ergänzt).
Folgendes Programm gibt einfach die ihm übergebenen Parameter aus.
Mit '-' beginnende Angaben werden als Optionen interpretiert und
entsprechend in der Ausgabe gekennzeichnet.
- void main(int argc, char *argv[])
{
cout << "Programmname: " << argv[0] << endl;
for ( int i=1 ; i<argc ; ++i )
if (argv[i][0]=='-')
cout << "Option " << (argv[i]+1) << endl;
else
cout << "Parameter " << argv[i] << endl;
}