ein Kapitel zurück                                           ein Kapitel weiter

Jetzt kommen wir zu einem Datentyp Namens enum der zur Aufzählung dient. Wenn wir unterschiedliche Ganzzahligen 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