Anhang A
2. Form der main() Funktion
Die zweite Form der main() Funktion erhält in der Klammer nach main zusätzliche Daten. Diese Daten werden als Parameter bezeichnet.
int main(int argn, char *argv[])
{
...hier stehen nachher Anweisungen
}
Mithilfe der Parameter können dem Programm beim Aufruf zusätzliche Daten mitgegeben werden. Nehmen wir an, das Programm MYPROG.EXE benötigt eine Datei mit Konfigurationsdaten. Um möglichst flexibel zu sein, soll der Name der Konfigurationsdatei beim Aufruf des Programms mit angegeben werden. Damit könnte ein Aufruf des Programms wie folgt aussehen:
myprog -c config.dat
Das Programm müsste nun irgendwie diese zusätzlichen Angaben -c conf.dat erhalten. Und genau diesen Zweck haben die Parameter argn und argv innerhalb der Klammer von main().
Der erste Parameter argn enthält die Anzahl der eingegebenen Wörter beim Programmaufruf, einschließlich des Programmnamens. Der Zugriff auf einzelnen Wörter erfolgt dann über den zweiten Parameter argv. argv ist ein Feld von char-Zeigern, wobei der letzte Zeiger im Feld immer den Wert '0' hat. Zu Zeiger und Felder kommen wir ebenfalls später. Nur so viel vorab: Um auf ein Element in einem Feld zuzugreifen, wird zuerst der Feldnamen angegeben (hier also argv) und dann in eckigen Klammern der Index des gewünschten Elements, wobei das erste Element den Index 0 besitzt. Die Parameter von main() haben damit bei obigem Aufruf folgende Werte:
| Parameter | Inhalt | Bemerkung |
|---|---|---|
| argn | 3 | als Zahl |
| argv[0] | "myprog" | als Zeiger auf Text |
| argv[1] | "-c" | als Zeiger auf Text |
| argv[2] | "config.dat" | als Zeiger auf Text |
| argv[3] | 0 | als Zahl |
Anzumerken ist, dass die Inhalte von argv[] lt. C++-Standard nicht vorgeschrieben sind. Vielmehr sagt der C++-Standard prinzipiell nur aus, dass mithilfe von argv[] implementierungsabhängige Werte an das Programm übergeben werden können, um dieses mit Informationen aus seiner Umgebung zu versorgen. In der Regel aber enthält das Element argv[0] den Namen des Programms, so wie oben angegeben.
Sie können einmal anhand des nachfolgenden Programms zum einen Ihren Compiler testen und zum anderen sich anschauen, wie innerhalb eines Programms die Parameter ausgewertet werden.
// Bsp fuer die Uebergabe von Parameter an ein Programm
#include <iostream>
int main (int argn, char* argv[])
{
std::cout << "Folgende Argumente wurden uebergeben:\n";
for (auto index=0; index < argn; index++)
std::cout << index+1 << ". Parameter: "
<< argv[index] << '\n';
}
Übersetzen Sie das Programm. Anschließend öffnen Sie ein Konsolenfenster und wechseln in das Verzeichnis, in dem die ausführbare Datei liegt. Starten Sie das Programm und geben Sie ihm beim Start zusätzliche Angaben mit, so wie in den nachfolgenden Programmausgaben aufgeführt.
Folgende Argumente wurden uebergeben:
1. Parameter: mainpar
2. Parameter: eins
3. Parameter: zwei
4. Parameter: drei
D:\cpp_kurs\progs\mainpar\bin\Debug>mainpar "1. Par" "2. Par"
Folgende Argumente wurden uebergeben:
1. Parameter: mainpar
2. Parameter: 1. Par
3. Parameter: 2. Par
Wie in der ersten Ausgabe zu sehen ist, werden die zu übergebenden Daten durch Leerzeichen getrennt. Enthält ein Datum Leerzeichen, ist dieses in Anführungszeichen zu setzen (2. Ausgabe).