ein Kapitel zurück                                           ein Kapitel weiter

Jetzt kommen wir zu einem Datentyp Namens enum der zur Aufzählung dient. Wenn wir unterschiedliche Ganzzahlige Werte benötigt haben wir dies mittels...

int x=1;
char z=2;

...gemacht. Nun gibt es auch die Möglichkeit mit Hilfe von enum Konstanten beim Programmstart festzulegen. Hierzu nun ein einfaches Beispiel....

/*Download:enum1.c*/
#include <stdio.h> enum zahl {NULLER,EINS,ZWEI,DREI,VIER}; int main() { enum zahl x; x=NULLER; 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 0; }

Wenn sie das Programm übersetzen wir auf dem Bildschirm die Zahlen 0-4 ausgegeben. Sehen wir uns das mal genauer an....

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

Intern beginnt unser Aufzählungstyp, sofern nicht anders initialisiert mit 0. Also NULLER=0, das nächste Feld wenn nicht anders angegeben +1. Somit ist EINS auch 1........ intern könnte man das so sehen....

enum zahl {0,1,2,3,4};

Ich habe gesagt falls nicht anders angegeben. Was heißt das? Wenn wir z.B. enum so benutzen...

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

....sieht das ganze intern so aus....

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

Sie sehen da wir die Farbe gelb mit dem Wert 6 initialisiert haben wird zur nächsten Konstante immer +1 dazugerechnet. Somit ist blau = 7 und gruen = 8.

Häufig sieht man enum im Einsatz mit den boolschen Variablen die überprüfen ob ein Wert wahr oder falsch ist. Hier der Quellcode dazu....

/*Download:enum2.c*/
#include <stdio.h> enum BOOL {FALSE,TRUE}; int main() { enum BOOL x; x=FALSE; if(x==TRUE) printf("x ist WAHR!\n"); else printf("x ist UNWAHR!\n"); return 0; }

Zugegeben auf den 1.Blick macht das nicht viel Sinn. Aber der Aufzählungstyp enum dient eigentlich nur zur besseren Lesbarkeit eines Programms. Wir könnten BOOL natürlich auch als Makro implementieren.....

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

Im Endeffekt bleibt es Ihnen überlassen welchen Programmierstil sie bevorzugen. Ob sie nun schreiben....

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

....oder....

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

...oder...

char JAN =  1;
char FEB = 2;
char MAR = 3;
char APR = 4;
char MAI = 5;
...
..

...die Ziele erreichen sie in allen 3 Beispielen ob sie nun effektiver sind oder nicht. In diesem Beispiel eben würde ich Ihnen enum empfehlen da diese Schreibweise am übersichtlichsten und kürzesten ist!

Aufgabe 1
Welchen Wert hat der Aufzählungstyp Error hier?

enum test {Nord=0,Ost=90,Sued=180,West=270,Error}; 

Aufgabe 2
Welchen Wert hat hier rot, blau und rosa?

enum farben {gruen=8, rot, blau,violett=13,rosa};

Aufgabe 3
Können sie hier einen Fehler entdecken?

/*Download:enum3.c*/
#include <stdio.h> enum test {a,b,c=0,d}; int main() { enum test x; x=8; printf("%d",x); return 0; }

Hier geht's zur Lösung!

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf