![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() ![]()
Kommandozeilenparameter sind eines der wichtigsten Konzepte der Entwicklung von Tools. Bestimmt kennen sie den Befehl : 'rename' zum umändern eines Namen einer Datei wie z.B.....
Zurück zum Thema! Wie machen wir das mit der Kommandozeile? Nun das ist eigentlich ganz einfach. Wir parameterisieren unser main() - Funktion. Dazu benötigen wir 2 Parameter. Hier der Syntax....
Nehmen wir mal an sie speichern das Programm unter dem Namen 'Argument.c' und anschließend Compilieren und Linken sie das Programm. Wenn sie das Programm jetzt ausführen wie gewohnt bekommen sie den Programmnamen
inklusive den Pfad in dem sie das Programm gespeichert habe ausgegeben...
Bei diesem kleinen Beispiel wird immer unser letztes Argument ausgegeben. Schauen wir uns das ganze mal grafisch an. Als Programmaufruf nehmen wir ....
![]()
Hierbei sehen sie das Argumente immer in Form von Zeichenketten an das Programm übergeben werden auch wenn die Argumente aus Ziffern bestehen. Ziffern müssen falls als Wert benötigt Konvertiert werden. Hierzu wieder ein kleines Beispiel....
Hier haben wir die Möglichkeiten einfache Rechenoperationen auszuführen. Aber gehen wir das Programm Schritt für Schritt durch. Nehmen wir an sie haben das Programm mit dem Namen 'calc.c' gespeichert und anschließend Compiliert. Jetzt geben wir in der Kommandozeile ein...
![]() Wir haben hier insgesamt 10 Argumente. Somit hat unser Parameter 'int argc' in der Funktion main() den Wert 10. Bitte beachten sie bei der Eingabe in der Kommandozeile das sie nach jedem Zeichen eine Leerspalte lassen. Folgendes würde nicht funktionieren.... calc 5+5-9*10/2 //falsch - Mit... if(argc < 4) { fprintf(stderr,"Benötige mindestens 4 Argumente!\n"); fprintf(stderr,"Aufruf: a.out <zahl exit(1); } ..testen wir erst mal ob mehr wie 4 Argumente eingegeben wurden. Falls nicht schreiben wir mittels 'fprintf' formatiert in dem Stream 'stderr' und bekommen eine entsprechende Fehlermeldung zurück. exit beendet das aufrufende Programm. Vor dem Rücksprung werden sämtliche Dateipuffer geschrieben, offene Dateien geschlossen und (mit atexit) festgelegte Exit-Funktionen aufgerufen. Die Funktion beendet das Programm mit dem als status angegebenen Exit-Code, der vom aufrufenden Prozeß geprüft werden kann. Der Wert Null steht normalerweise für eine fehlerfreie Ausführung, Werte ungleich Null signalisieren Fehler. Folgende Konstanten stehen für status zur Verfügung... EXIT_FAILURE : Fehlerhaftes Programmende - Signal an das Betriebssystem, daß das Programm mit einem Fehler endete. EXIT_SUCCESS : Normales Programmende. Falls mehr wie 4 Argumente übergeben wurden geht es mit .... erg = atoi(argv[1]); ...weiter. Mit der Funktion 'atoi()' konvertieren sie das Zeichen das in 'argv[1]' steht, bei uns das Zeichen "5" in den Integerwert 5. atoi steht in der Headerdatei <stdlib.h>. Des weiteren gibt auch noch die Funktionen 'atof()' und 'atol()'. atof macht aus einem String eine Gleitkommazahl und atol macht aus einem String einen long - Wert. Weiter geht's mit.... for(i=1; i<argc-1; i+=2) { for(j=i+1;j<i+2;j++) { y = atoi(argv[i+2]); Unsere 1. for - Schleife durchläuft immer die ungeraden Zahlen also alle Indexe wo Zahlen stehen. [1]='5', [3]='5', [5]='9', [7]='10', [9]='2'. Unsere 2. for Schleife dient für unsere Operatoren +,-,* und /. Also alle geraden Zahlen vom Index : [2] ='+', [4]='-', [6]='*', [8]='/'. Natürlich sind die Zahlen und Operatoren nichts anderes wie Zeichenketten. In der 2. for - Schleifen inne bekommt die Variable y den Dezimalen Wert der Zeichenkette 'argv[3]' den wir wiederum mittels atoi konvertieren. Jetzt testen wir mit.... if(strcmp(argv[j],"+") ==0) { erg+=y; } ob 'argv[2]' gleich mit dem Zeichen "+" ist. Den Befehl 'strcmp' haben wir bereits kennen gelernt. In unserem Fall ist das 2. Argument tatsächlich das Zeichen "+". Nun können wir den 1. Wert (ehemals 1.Argument) mit dem 2. Wert (ehemals 3.Argument) addieren. Der Wert bleibt uns in der Variablen 'erg' erhalten. Genauso läuft es mit den nächsten Zahlen und Operatoren ab, bis keine Argumente (Zahlen oder Operatoren) vorhanden sind. ![]() ![]() ![]() |