Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 9 Funktionen
Pfeil 9.1 Was sind Funktionen?
Pfeil 9.2 Wozu dienen Funktionen?
Pfeil 9.3 Definition von Funktionen
Pfeil 9.4 Funktionsaufruf
Pfeil 9.5 Funktionsdeklaration
Pfeil 9.6 Lokale Variablen
Pfeil 9.7 Globale Variablen
Pfeil 9.8 Statische Variablen
Pfeil 9.9 Schlüsselwörter für Variablen – Speicherklassen
Pfeil 9.9.1 auto
Pfeil 9.9.2 extern
Pfeil 9.9.3 register
Pfeil 9.9.4 static
Pfeil 9.10 Typ-Qualifizierer
Pfeil 9.10.1 volatile
Pfeil 9.10.2 const
Pfeil 9.11 Geltungsbereich von Variablen
Pfeil 9.12 Speicherklassen-Spezifizierer für Funktionen
Pfeil 9.12.1 extern
Pfeil 9.12.2 static
Pfeil 9.12.3 volatile
Pfeil 9.13 Datenaustausch zwischen Funktionen
Pfeil 9.14 Wertübergabe an Funktionen (call-by-value)
Pfeil 9.15 Der Rückgabewert von Funktionen
Pfeil 9.16 Die Hauptfunktion »main()«
Pfeil 9.17 Rückgabewert beim Beenden eines Programms
Pfeil 9.17.1 Programmende auswerten
Pfeil 9.18 Funktionen der Laufzeitbibliothek
Pfeil 9.19 Getrenntes Kompilieren von Quelldateien
Pfeil 9.20 Rekursive Funktionen (Rekursion)
Pfeil 9.20.1 Exkurs: Stack
Pfeil 9.20.2 Rekursionen und der Stack
Pfeil 9.20.3 Fakultät
Pfeil 9.20.4 Fibonacci-Zahlen
Pfeil 9.20.5 Größter gemeinsamer Teiler (GGT)
Pfeil 9.21 »inline«-Funktionen


Rheinwerk Computing - Zum Seitenanfang

9.17 Rückgabewert beim Beenden eines Programms Zur nächsten ÜberschriftZur vorigen Überschrift

Über dieses Thema wurden bereits ganze Threads in diversen Foren gefüllt. Generell ist der Rückgabewert beim Beenden eines Programms abhängig von der Umgebung des Betriebssystems. Unter Linux/UNIX beispielsweise bedeutet ein Rückgabewert von 0, dass ein Programm erfolgreich beendet wurde; alles andere bedeutet eben, dass irgendetwas schiefgelaufen ist.

Andere Betriebssysteme wiederum können allerdings auch einen anderen Rückgabewert als erfolgreiche Beendigung erwarten – was bedeutet, dass es hierbei keinen portablen Standard gibt.

Dennoch gibt es mit den Makros EXIT_SUCCESS und EXIT_FAILURE einen recht zuverlässigen Weg, um ein Programm zu beenden. Beide Makros sind in der Headerdatei <stdlib.h> definiert und schon seit dem C89-Standard vorhanden. Damit müssen Sie sich nicht mehr darum kümmern, welchen Wert auf welchem System Sie denn nun zurückgeben müssen, um zu melden, ob sich eine Anwendung erfolgreich oder eben nicht erfolgreich beendet hat. Bei einem erfolgreichen Ende geben Sie einfach EXIT_SUCCESS zurück und bei einem Fehler EXIT_FAILURE. Natürlich müssen Sie auch die Headerdatei <stdlib.h> mit einbinden.

Hierzu ein Beispiel, wie Sie diese beiden Makros sinnvoll einsetzen können:

/* exit_code.c */
#include <stdio.h>
#include <stdlib.h>

int main(void) {
   int val, ret;

   printf("Bitte Eingabe machen : ");
   ret = scanf("%d", &val);

   if(ret != 1) {
      printf("Fehler bei scanf()-Eingabe\n");
      return EXIT_FAILURE;
   }

   if(val < 0) {
      printf("Fehler - Negative Zahl\n");
      return EXIT_FAILURE;
   }
   return EXIT_SUCCESS;
}

Hinweis

Von nun an sollen auch in den folgenden Listings die entsprechenden EXIT_-Makros verwendet werden.



Rheinwerk Computing - Zum Seitenanfang

9.17.1 Programmende auswerten topZur vorigen Überschrift

Jeder will Ihnen sagen, dass ein Programm bei erfolgreicher Beendigung 0 und bei einem Fehler etwas ungleich 0 zurückgeben soll. Aber wie man dies anschließend auswerten kann, erfährt man eigentlich selten. Ich will Ihnen hier jeweils einen Weg für MS-Windows und einen für Linux/Unix zeigen, wie Sie das Programmende auswerten können. Als Beispiel dient das Listing exit_code.c aus dem vorherigen Abschnitt.

MS-Windows/MS-DOS

Unter MS-Windows/MS-DOS kommt man hier mit der Batch-Programmierung recht weit. Eine Batch-Datei hat die Endung *.bat und ist in Windows und MS-DOS standardmäßig integriert. Zum Erstellen von Batch-Dateien ist ein gewöhnlicher ASCII-Editor (wie beispielsweise Notepad) ausreichend. Die Befehle einer solchen Datei werden zeilenweise abgearbeitet.

Viele DOS-Progamme liefern beim Beenden einen sogenannten Errorlevel. Dieser kann die Werte 0 bis 255 annehmen. Auch hier bedeutet gewöhnlich ein Errorlevel ungleich 0, dass ein Fehler aufgetreten ist. In unserem Fall bedeutet dies: Gibt unser Programm 0 zurück, ist der Errorlevel auch 0. Geben wir aus unserem Programm 1 zurück, dann ist der Errorlevel ebenfalls 1 usw.

Einen solchen Errorlevel können Sie mit einer üblichen if-Bedingung im Batch-Skript abfragen, zum Beispiel so:

if errorlevel 1 goto eins

Ist hier beispielsweise der Rückgabewert des Programms 1, dann wird zum Label eins gesprungen. Ein solches Label wird folgendermaßen angegeben:

:eins

Hinter diesem Label können Sie jetzt entsprechend auf den Errorlevel reagieren. Hierzu zeige ich Ihnen nun ein Batch-Skript, welches den Rückgabewert von unserem Programm exit_code.exe auswertet (Kommentare werden mit den Zeichen :: eingeleitet):

:: Programmname: check.bat
:: keine Anzeige der Eingabe (auch nicht von echo)
@echo off

:: Programm starten
exit_code.exe

:: Errorlevel auswerten
if errorlevel 1 goto eins
if errorlevel 0 goto null

:: Errorlevel 1
:eins
   echo Fehler: Ende-Status ist 1
   goto ende
:null
   echo Alles Ok: Ende-Status ist 0
   goto ende
:ende
   PAUSE

Durch die Verwendung von PAUSE am Ende können Sie die Batch-Datei check.bat auch per Mausklick starten, vorausgesetzt, das Programm exit_code.exe und das Batch-Skript befinden sich im selben Verzeichnis. Hier sehen Sie das Batch-Skript (per Mausklick) bei der Ausführung:

Bitte Eingabe machen : x
Fehler bei scanf()-Eingabe
Fehler: Ende-Status ist 1
Drücken Sie eine beliebige Taste . . .

Bitte Eingabe machen : 5
Alles Ok: Ende-Status ist 0
Drücken Sie eine beliebige Taste . . .

Linux/Unix

Bei Linux/Unix gibt es für die Beendigung eines Shellskripts oder Programms, das zuletzt ausgeführt wurde, die automatische Shellvariable $?. Die Bedeutung dieser Variable ist im Grunde dieselbe, wie eben schon bei Errorlevel unter Windows/MS-DOS erwähnt wurde. Selbst die Erstellung des Shellskripts dafür gestaltet sich recht ähnlich – nur dass die Shell von Linux/Unix schon um einiges mächtiger ist.


Hinweis

Wollen Sie mehr über die Shell-Programmierung unter Linux/Unix erfahren, kann ich Ihnen *hüstel* mein Buch »Shell-Programmierung. Das umfassende Handbuch« empfehlen, das ebenfalls beim Rheinwerk Verlag erschienen ist.


Das Shellskript sieht wie folgt aus:

# Rückgabewert Überprüfen
# Name: check.sh

# Programm starten
./exit_code

# Rückgabewert in ret
ret=$?

# Rückgabewert: 0
if [ ret -eq 0 ]
then
   echo "Alles Ok: Rückgabewert war 0"
fi

# Rückgabewert: 1
if [ ret -eq 1 ]
then
   echo "Fehler: Rückgabewert war 1"
fi

Dieses Shellskript muss nur noch ausführbar gemacht werden. Das Programm sieht bei der Ausführung so aus (hier wird auch davon ausgegangen, dass sich das Shellskript check.sh im selben Verzeichnis wie das auszuführende Programm befindet):

$ chmod u+x check.sh
$ ./check.sh
Bitte Eingabe machen : x
Fehler bei scanf()-Eingabe
Fehler: Rückgabewert war 1
$ ./check.sh
Bitte Eingabe machen : 5
Alles Ok: Rückgabewert war 0


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de