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

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 17 Strukturen
  gp 17.1 Struktur deklarieren
  gp 17.2 Initialisierung und Zugriff auf Strukturen
  gp 17.3 Strukturen als Wertübergabe an eine Funktion
  gp 17.4 Strukturen als Rückgabewert einer Funktion
  gp 17.5 Strukturen vergleichen
  gp 17.6 Arrays von Strukturen
  gp 17.7 Strukturen in Strukturen (Nested Structures)
  gp 17.8 Kurze Zusammenfassung zu den Strukturen
  gp 17.9 Union
  gp 17.10 Aufzählungstyp enum
  gp 17.11 Typendefinition mit typedef
  gp 17.12 Attribute von Strukturen verändern (nicht ANSI C)
  gp 17.13 Bitfelder
  gp 17.14 Das offsetof-Makro


Galileo Computing - Zum Seitenanfang

17.10 Aufzählungstyp enum  toptop

Das Schlüsselwort enum dient der Aufzählung von Konstanten. Mit dieser Struktur lassen sich beim Programmstart eine Reihe von Konstanten festlegen. Ein Beispiel:

/* enum1.c */
#include <stdio.h>
#include <stdlib.h>
enum zahl { NU_LL, EINS, ZWEI, DREI, VIER};
int main(void) {
   enum zahl x;
   x=NU_LL;
   printf("%d\n",x);
   x=EINS;
   printf("%d\n",x);
   x=ZWEI;
   printf("%d\n",x);
   x=DREI;
   printf("%d\n",x);
   x=VIER;
   printf("%d\n",x);
   return EXIT_SUCCESS;
}

Bei Ausführung des Programms werden die Zahlen von null bis vier auf dem Bildschirm ausgegeben. Die Aufzählung lautet hier:

enum zahl { NU_LL, EINS, ZWEI, DREI, VIER };

In der Regel beginnt der Aufzählungstyp, sofern nicht anders angegeben, mit 0; also NU_LL=0. Das nächste Feld, wenn nicht anders angegeben, hat den Wert 1. Somit ist EINS auch 1. Gleichbedeutend hätte man dies auch so schreiben können:

enum zahl { NU_LL=0, EINS=1 ,ZWEI=2 ,DREI=3 ,VIER=4 };

Wird enum hingegen so benutzt:

enum farben { rot, gelb=6, blau, gruen };

würden folgende Konstanten definiert werden:

enum farben { 0, 6, 7, 8 };

Die Farbe gelb wurde mit dem Wert 6 initialisiert. Die Steigerung des Werts zur nächsten Konstante beträgt bei enum immer plus eins. Somit hat die Konstante blau den Wert 7 und gruen den Wert 8.

Häufig wird enum zur Nachbildung der boolschen Variablen verwendet. Hier das Beispiel dazu:

/* enum2.c */
#include <stdio.h>
#include <stdlib.h>
enum BOOL { FALSE, TRUE };
int main(void) {
   int zahl;
   printf("Gib mir eine Zahl (0–9): ");
   if( (scanf("%d",&zahl)) == FALSE )
      printf("Das war keine Zahl!\n");
   else
      printf("Vielen Dank!\n");
   if( (zahl==7) == TRUE)
      printf("Wow, die 7, meine Lieblingszahl\n");
   return EXIT_SUCCESS;
}

Der Aufzählungstyp enum dient der besseren Lesbarkeit eines Programms. BOOL (in C++ gibt es diesen Datentyp wirklich) könnten Sie aber auch als Makro implementieren:

#define BOOL int
#define FALSE 0
#define TRUE  1

Es gibt also viele Wege, die ans Ziel führen. Die zwölf Monate eines Jahres könnten Sie mit enum beispielsweise so realisieren:

enum Monate {
   JAN=1, FEB, MAR, APR, MAI, JUN, JUL, AUG, SEP, OKT, NOV, DEC
 }

oder mit define so:

#define JAN  1
#define FEB  2
#define MAR  3
#define APR  4
#define MAI  5
...

Bei beiden Beispielen wurden die einzelnen Monate als Konstanten definiert.

Wo liegt dann der Unterschied zwischen enum und einer Reihe von Präprozessor-Defines? Ironischerweise besteht kaum ein Unterschied. Geplant war (laut ANSI C-Standard) enum, um ohne Casts verschiedene integrale Typen vermischen zu können, was ja sonst in der Regel einen Compilerfehler zur Folge hat. So hätten eine Menge Programmierfehler aufgefangen werden können.

Aber enum hat auch Vorteile:

gp  Zahlenwerte werden automatisch zugewiesen.
gp  Debugger-Werte von enum-Variablen können symbolisch dargestellt werden.
gp  enum unterliegt auch der Sichtbarkeitsregel von C.
 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de