Wenn fertig, bitte Fenster schließen

Die zweite Form der main() Funktion

Die zweite Form der main()-Funktion enthält innerhalb der runden Klammern der Funktion noch zusätzliche Angaben. Solche Angaben innerhalb von Funktionsklammern werden auch als Parameter bezeichnet.

PgmHeader
int main(int argn, char *argv[])
{
  ...hier stehen nachher Anweisungen
}

Mit Hilfe dieser Parameter können einem Programm beim Aufruf zusätzliche Angaben mitgeben und diese dann ausgewertet werden. Nehmen wir zum Beispiel einmal an, ein Programm hat den Namen MYPROG.EXE und würde eine zusätzliche Datei mit irgendwelchen Konfigurationsdaten benötigen. Um möglichst flexibel zu sein, soll der Name dieser Konfigurationsdatei beim Aufruf des Programms mit übergeben 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(...).

HinweisDie Namen der Parameter argn und argv sind 'rein willkürlich'. Sie können den Parametern auch 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 später noch ausführlich erklärt.

Der erste Parameter argn enthält die Anzahl der eingegebenen Wörter beim Programmaufruf, einschließlich des Programmnamens. Unter Wörter werden hier Eingaben verstanden die durch ein Leerzeichen voneinander getrennt sind. Auf die einzelnen Wörter kann dann über den zweiten Parameter argv zugegriffen werden. argv ist ein Feld von char-Zeigern, wobei der letzte Eintrag im Feld immer ein Zeiger mit dem Wert '0' ist. Zu Zeigern und Felder kommen wir später ebenfalls noch. Nur so viel vorab: um auf ein bestimmtes 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(...) würden damit bei obigem Aufruf folgende Werte besitzen:

Parameter Inhalt Bemerkung
argn 3 als Zahl
argv[0] "myprog" als Zeiger auf den Text
argv[1] "-c" als Zeiger auf den Text
argv[2] "config.dat" als Zeiger auf den Text
argv[3] 0 als Zahl

Anzumerken ist noch, dass die Inhalte von argv[] lt. C++ Standard nicht vorgeschrieben sind. Vielmehr sagt der C++ Standard prinzipiell nur aus, dass mit Hilfe 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 selbst, so wie oben angegeben. Der C++ Standard verlangt nur, dass hier der Name steht, mit dem das Programm aufgerufen wurde, und dies ist fast immer der Programmname.

BeispielSie können jetzt einmal anhand des nachfolgenden Programms zum einen Ihren Compiler testen und zum anderen sich anschauen, wie innerhalb eines Programms die Parameter ausgewertet werden.

Starten Sie die IDE und erstellen Sie ein neues Projekt mit dem Namen mainpar. Fügen Sie dem Projekt eine leere Quellcode-Datei hinzu und geben dann das folgende Programm ein:

Beispielprogramm// C++ Kurs
// Beispiel für die Übergabe von Parameter an ein Programm


#include <iostream>

int main (int argn, char* argv[])
{

   std::cout << "Folgende Argumente wurden übergeben:" << std::endl;
   for (int iLoop=0; iLoop < argn; iLoop++)
       std::cout << iLoop+1 << ". Parameter: " << argv[iLoop] << std::endl;

}

Übersetzen Sie zunächst das Programm. Anschließend öffnen Sie ein Konsolenfenster und wechseln in das Verzeichnis, in dem die ausführbare Datei (exe-Datei) liegt. Starten Sie das Programm und geben sie ihm beim Start noch zusätzliche Argumente mit, so wie in der nachfolgenden Programmausgabe aufgeführt.

Programmausgabe D:\temp\mainpar\Debug>mainpar eins zwei drei
 Folgende Argumente wurden übergeben:
 1. Parameter: mainpar
 2. Parameter: eins
 3. Parameter: zwei
 4. Parameter: drei

 D:\temp\mainpar\Debug>mainpar "erster parameter" "und zweiter"
 Folgende Argumente wurden uebergeben:
 1. Parameter: mainpar
 2. Parameter: erster parameter
 3. Parameter: und zweiter

D:\temp\mainpar\Debug>

Wie der Programmausgabe entnommen werden kann, werden die Argumente durch Leerzeichen getrennt. Soll ein Argument auch Leerzeichen enthalten, so ist das Argument in Anführungszeichen zu setzen.

Sollte in der Zwischenzeit etwas Verwirrung bezüglich der Begriffe Parameter und Argument aufgekommen sein: ein Parameter eine Variable die innerhalb der Klammer bei der Funktionsdefinition bzw. -deklaration steht und das Argument ist der Ausdruck, der beim Aufruf der Funktion tatsächlich angegeben wurde.

Wenn Sie genug getestet haben, schließen Sie dieses Fenster und kehren zum Kurs zurück.