Seite 1 von 1

enum

Verfasst: Do Jun 04, 2009 10:51 am
von SeriK00
/* enum2.c */
#include <stdio.h>
#include <stdlib.h>
Guten Tag,
ich habe jetzt 3 Möglichkeiten um enums zu definieren realisiert. Alle funktioonieren. Aber wo liegt jetzt der genau Unterschied?

1.möglichkeit
Wird diese möglichkeit benutzt, um mehrere variaablen von type enum zu deklarieren?
enum farben test;
enum farben test2;
enum farben test3;

2. Möglichkeit
Hier gibt es nur eine Variable

3. Wo liegen die Vorteile einer typedef?
Hier kann ich ja auch mehrere Variablen von Type enum deklarieren?

Code: Alles auswählen

//1. Möglichkeit
//enum farben
//{
//	blau,
//	geld,
//	rot,
//};
//enum farben test;

//2.Möglichkeit
//enum
//{
//	blau,
//	geld,
//	rot,
//}test;

//3. Möglichkeit
typedef enum
{
	blau,
	geld,
	rot,
}auswahl;
auswahl test;

int main (void)
{
	unsigned int eingabe;
	printf("\nBitte zahl eingebe: ");
	scanf("%d", &eingabe);
	test = eingabe;
	switch(test)
	{
	case blau:
		puts("\nblau");
		break;
	case geld:
		puts("\ngeld");
		break;
	case rot:
		puts("\nrot");
		break;
	default:
		puts("\nende");
	}
	return 0;
}

Re: enum

Verfasst: Do Jun 04, 2009 12:10 pm
von Xin
SeriK00 hat geschrieben:ich habe jetzt 3 Möglichkeiten um enums zu definieren realisiert. Alle funktioonieren. Aber wo liegt jetzt der genau Unterschied?

1.möglichkeit
Wird diese möglichkeit benutzt, um mehrere variaablen von type enum zu deklarieren?
enum farben test;
enum farben test2;
enum farben test3;
Hier definierst Du Variablen vom Typ 'enum farben'.
enum farben wird hier nicht definiert, das bedeutet, dass Du enum farben bereits zuvor definiert haben musst.
SeriK00 hat geschrieben:2. Möglichkeit
Hier gibt es nur eine Variable
hier definierst(!= deklarieren) Du, was ein enum farben ist und definierst weiterhin eine Variable. Du könntest auch mehrere Variablen durch Kommata getrennt definieren.
SeriK00 hat geschrieben:3. Wo liegen die Vorteile einer typedef?
Hier kann ich ja auch mehrere Variablen von Type enum deklarieren?
Hier definierst Du einen eigenen Typen-Namen für die enum. Du brauchst also in dem Fall nicht mehr enum farben zu schreiben, sondern kannst Deinen eigenen Typennamen stattdessen verwenden.

Re: enum

Verfasst: Do Jun 04, 2009 12:22 pm
von fat-lobyte
Erwähnt sei noch, dass man auch "anonyme" enums deklarieren kann, die man dann nicht mehr ansprechen kann.
Die Nützlichkeit liegt darin, dass man die Member des Enums sehr wohl ansprechen kann.
In Verbindung mit der Tatsache dass Enum-Werte eigentlich Integer Werte sind kann man dann sowas machen:

Code: Alles auswählen

struct Message
{
    enum { header_length = 4 };
};

std::cout<<"Der Header der Nachricht ist "<<Message::header_length<<" bytes gross.\n";

Re: enum

Verfasst: Do Jun 04, 2009 1:06 pm
von Xin
fat-lobyte hat geschrieben:In Verbindung mit der Tatsache dass Enum-Werte eigentlich Integer Werte sind kann man dann sowas machen:

Code: Alles auswählen

struct Message
{
    enum { header_length = 4 };
};

std::cout<<"Der Header der Nachricht ist "<<Message::header_length<<" bytes gross.\n";
Okay... und wenn die Message::item_size auch 4 groß sein soll?

Kann es sein, dass hier enums für Dinge missbraucht werden, die als (static int const) gefragt wären?
(und nebenher einen Anfänger mit Informationen verwirren, die er noch gar nicht benötigt?)

Re: enum

Verfasst: Fr Jun 05, 2009 5:07 pm
von fat-lobyte
Xin hat geschrieben:Okay... und wenn die Message::item_size auch 4 groß sein soll?
Ich sehe kein Problem darin.
Xin hat geschrieben:Kann es sein, dass hier enums für Dinge missbraucht werden, die als (static int const) gefragt wären?
Das stimmt. Aber erstens ist es einfach zu denklarieren, einfach anzusprechen und außerdem habe ich bei static const int angst, dass das tatsächlich als
Variable gespeichert wird, und dementsprechend abgerufen werden muss. So deklariert sollte es direkt in den Opcodes landen...
Ist nur so ein kleiner Trick aber ich verwende ihn gerne.
Xin hat geschrieben:(und nebenher einen Anfänger mit Informationen verwirren, die er noch gar nicht benötigt?)
Stimmt, das gehört eigentlich nicth hierher.