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().

Die Namen der Parameter argn und argv sind rein willkürlich. Sie können den Parametern andere Namen geben, wie z.B. num und param, jedoch haben sich argn und argv quasi als Standardnamen eingebürgert. Was aber unter keinen Umständen verändert werden darf, sind die Datentypen der Parameter int und char*...[]. Was Datentypen sind, wird in im Kapitel Variablen erklärt.

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.

Öffnen Sie nun Ihre Entwicklungsumgebung und erstellen ein neues Projekt mit dem Namen mainpar. Fügen Sie dem Projekt eine leere Quellcode-Datei hinzu und geben dann das folgende Programm ein:
// 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.

D:\cpp_kurs\progs\mainpar\bin\Debug>mainpar eins zwei drei
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).