C-Programmierung für Einsteiger #2

Linux C-Programmierung für Einsteiger #2

Im [DOC:START:178]ersten Teil[DOC:END] des C-Programmierkurses hast du bereits die Grundstruktur eines C-Programms kennengelernt. Auf dieser aufbauend geht es gleich munter weiter. Im zweiten Teil lernst du die Verwendung der for-Schleife und des Zugriffs auf die dem Programm übergebenen Parameter. Das folgende Programm gibt die dem Programm mitgegebenen Parameter aus.

 

/* Dateiname:   inout.c
   Funktion:    Die als Parameter übergebenen Wörter ausgegeben.
*/

#include <stdio.h>

int main(int argc, char *argv[])
{
  int i = 0;

  if(argc==1)
  { printf("Benutzung: %s [Zeichenketten ...]\n\n", argv[0]);
    exit(1);
  }

  for(i=0; i<argc; i++)
  { printf("%d: %s\n", i, argv[i]);  
  }

  printf("\n");
  return(0);
}

 

Nun zur Erklärung des obigen C-Quellcodes.

 

  int i = 0;

 

Diese Zeile erzeugt eine Integer-Variable namens "i". Die Variable "i" enthält vorübergehend die Zahl 0.

 

  if(argc==1)
  { printf("Benutzung: %s [Zeichenketten ...]\n\n", argv[0]);
    exit(1);
  }

 

Dieser Block fragt die Anzahl der dem Programm übergebenen Parameter ab. Wie du später noch sehen wirst, zählt der Programmaufruf selber auch als Parameter. Wenn also die Parameteranzahl 1 ist, also neben dem Programmnamen kein weiterer Parameter angegeben wurde, wird eine entsprechende Fehlermeldung ausgegeben und das Programm mit dem Rückgabewert 1 beendet (exit).

 

  for(i=0; i<argc; i++)
  { printf("%d: %s\n", i, argv[i]);  
  }

 

Hier kommt zum ersten Mal die Zählschleife "for()" zum Einsatz. Der erste Parameter von "for()" ist der Startwert. Die Zählung der Variablen "i" soll hier also bei 0 beginnen. Der zweite, durch Semikolon getrennte Parameter legt die Bedingung fest; solange die Variable "i" einen kleineren Wert als die Variable "argc" (Anzahl der Programmparameter) hat, wird die Schleife wiederholt. Der dritte durch Semikolon getrennte Parameter von "for()" steht für die Aktion, welche beim nächsten Durchlauf ausgeführt werden soll. In diesem Fall wird die Variable "i" jeweils um den Wert 1 erhöht.

Die in geschwungenen Klammern eingeschlossene printf()-Anweisung schreibt den Inhalt der Variablen "i" und den jeweiligen Programm-Parameter auf die Standardausgabe, also normalerweise den Bildschirm. Der Programm-Parameter (argv) wird dabei über einen Index "i" angesprochen. Der erste Parameter ist in der Variablen "argv[0]" gespeichert, der zweite Parameter in der Variablen "argv[1]" usw...

Vielleicht wunderst du dich noch über die komische Schreibweise innerhalb von "printf()". Bei der Sprache C müssen Variablen außerhalb der doppelten Anführungszeichen angegeben werden. Die Angabe "%d" besagt einfach, dass die erste durch Komma getrennte Variable vom Typ Integer ist - "%s" heißt, dass eine Zeichenkette, also ein String, folgt.

Die restlichen Zeilen des Programms sind nichts Neues und werden daher hier nicht mehr erklärt. Um das lästige Compilieren etwas zu vereinfachen, benutzen wir ab jetzt immer ein sogenanntes Makefile. Dies ist eine Datei namens "Makefile" mit Anweisungen für das "make"-Kommando. Da bereits das Dokument [DOC:START:92]Makefiles schreiben[DOC:END] den Aufbau der Datei beschreibt, werde ich an dieser Stelle nicht weiter darauf eingehen.

 

CC	=	gcc
PROG	=	inout

all:
	$(CC) -c $(PROG).c
	$(CC) -o $(PROG) $(PROG).o

clean:
	rm -f $(PROG) $(PROG).o *~

 

Nachdem die Zeilen als Datei "Makefile" abgespeichert wurden, kann das Programm mit dem folgenden Kommando compiliert werden:

make

Sind dabei keine Fehlermeldungen aufgetreten, kann das Programm wie folgt gestartet werden:

./inout Hallo Welt

Die Ausgabe sieht dann so aus:

 

0: ./inout
1: Hallo
2: Welt

 

Bei der Ausgabe sieht man, dass der Programmaufruf eben auch ein Parameter ist. Hast du mit dem Programm etwas herumgespielt, kannst du die Objekt-Datei und das ausführbare Programm mit einem Kommando wieder löschen:

make clean

Und damit bin ich auch schon am Ende des zweiten Teils der C-Programmierung angelangt. Wenn noch etwas unklar ist, darfst du dich gerne mit mir in Verbindung setzen.

Artikelbewertung: 
No votes yet
War dieser Artikel hilfreich?