Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste


C - Programmierung am Raspberry  Schaltpläne und Bauteilbeschreibungen  Adapterkabel  Mechanik  EDV-Literatur deutsch 



    FIAN Österreich     Marktplatz Natur    
    Bäckerei Freitag

capt09

Dies ist eine alte Version des Dokuments!


Warning: Undefined array key 1 in /home/.sites/31/site216/web/lib/plugins/note/syntax.php on line 103 Warning: Undefined array key 1 in /home/.sites/31/site216/web/lib/plugins/note/syntax.php on line 103

Parameter lesen

Sie können Ihr Programm auch auf andere Weise eingeben, indem Sie es als Parameter angeben, wenn Sie das Programm über die Befehlszeile starten. An dieser Stelle muss ich zugeben, dass ich in den letzten 8 Kapiteln nicht ganz ehrlich war. Ich habe immer die Definition der Hauptfunktion gezeigt als

  void main (void)

Dies funktioniert, wie Sie gesehen haben. Das ist jedoch nicht unbedingt korrekt. Die strenge Definition von main sieht folgendermaßen aus:

  int main (int argc, char *argv[])

Aber seien wir ehrlich: wenn ich Ihnen das in Kapitel 1 gezeigt hätte wären sie davongelaufen, nicht wahr? Was bedeutet das alles?

Zunächst können wir sehen, dass main eine Ganzzahl zurückgibt. Dies ist ein Erfolgs- oder Fehlercode, den einige Betriebssysteme zur Verarbeitung in einem Shell-Skript oder dergleichen verwenden können. Wenn ein Programm erfolgreich ist, gibt main normalerweise 0 zurück, und wenn es fehlschlägt, gibt es einen Fehlercode ungleich Null zurück. Für Programme, die alleine laufen, brauchen Sie sich wirklich keine Sorgen zu machen!

Was nützlicher ist, sind die beiden anderen Argumente. argc ist eine Ganzzahl, und dies ist die Anzahl der Parameter, die beim Starten des Programms in der Befehlszeile angegeben wurden. Seltsamerweise enthält die Nummer den Programmnamen selbst, sodass dieser Wert immer 1 oder mehr beträgt. Wenn Parameter angegeben wurden, sind es 2 oder mehr.

char * argv []; das ist doch verwirrend, oder? Dies ist eigentlich eine Zusammenstellung einiger Dinge, die wir bereits gesehen haben. Da ist ein * drin, also ein Zeiger. Der Typ ist char, also sind Zeichen darin und es gibt eckige Klammern, also ist es ein Array.

Dies ist eigentlich ein Array von Zeigern auf Zeichen. Jedes Element des Arrays ist eine Zeichenfolge, und jede Zeichenfolge ist einer der Parameter, die dem Programm zur Verfügung gestellt werden.

In der Praxis ist es wahrscheinlich einfacher zu verstehen:

#include <stdio.h>
 
int main (int argc, char *argv[])
{
  int param = 0;
  while (param < argc)
  {
    printf ("Parameter %d ist %s\n", param, argv[param]);
    param++;
  }
  return 0;
}

Oben: Die Argumente argc und argv für die Hauptfunktion können verwendet werden, um auf Parameter zuzugreifen, die in der Befehlszeile eingegeben werden, wenn das Programm ausgeführt wird.

Versuchen Sie, dies wie zuvor auszuführen, indem Sie einfach den Namen eingeben. Versuchen Sie dann, andere Dinge nach dem Namen in der Befehlszeile einzugeben, und sehen Sie, was das Programm druckt.

pi@raspberry:~ $ ./ein
Parameter 0 ist ./ein

oder

pi@raspberry:~ $ ./ein Das ist ein Test
Parameter 0 ist ./ein
Parameter 1 ist Das
Parameter 2 ist ist
Parameter 3 ist ein
Parameter 4 ist Test
pi@raspberry:~ $
[DIE RICHTIGE NUMMER WÄHLEN]
Denken Sie daran, dass das erste Element im argv-Array - argv [0] - der Name des Programms selbst ist und nicht der erste Parameter. Die eigentlichen Parameter beginnen bei argv [1].

Hier ist ein Beispiel eines (sehr) einfachen Rechners, der mit Programmparametern geschrieben wurde:

#include <stdio.h>
 
int main (int argc, char *argv[])
{
  int arg1, arg2;
  if (argc == 4)
  {
    sscanf (argv[1], "%d", &arg1);
    sscanf (argv[3], "%d", &arg2);
    if (*argv[2] == '+') printf ("%d\n", arg1 + arg2);
    if (*argv[2] == '-') printf ("%d\n", arg1 - arg2);
    if (*argv[2] == 'x') printf ("%d\n", arg1 * arg2);
    if (*argv[2] == '/') printf ("%d\n", arg1 / arg2);
  }
  return 0;
}

Beachten Sie, dass wir *argv[2] verwenden, um das erste Zeichen des zweiten Parameters zu erhalten. Dies sollte immer nur ein einzelnes Zeichen sein. Da jedoch jedes der Argumente eine Zeichenfolge sein kann, ist argv[2] (ohne Sternchen) ein Pointer auf ein Zeichen und nicht auf das einzelne Zeichen, das für einen Vergleich mit == erforderlich ist.

[RÜCKGABEWERTE PRÜFEN]
Unter Linux wird der Rückgabewert eines Programms nicht angezeigt, sondern gespeichert und kann über die Befehlszeile gelesen werden. Wenn Sie echo $? unmittelbar nach dem Ausführen eines Programms eingeben wird der Wert angezeigt, den das Programm zurückgegeben hat. Rückgabewerte sind hauptsächlich nützlich, wenn Sie Programme aus Skripten aufrufen.

Stellen Sie sicher, dass Sie die Argumente vom Operator durch Leerzeichen trennen, damit sie als separate Parameter identifiziert werden. <Progname> 2 + 2 statt <Progname> 2+2

pi@raspberry:~ $ ./calc 2 + 3
5
pi@raspberry:~ $

Oben: Der Rechner liest die beiden Werte und den Operator aus dem argv-Array und druckt das Ergebnis

capt09.1603897442.txt.gz · Zuletzt geändert: 2020/10/28 16:04 von administrator