Forum: Mikrocontroller und Digitale Elektronik C -> enum -> Speicher


von Peddi (Gast)


Lesenswert?

Guten Morgen,
1
  /*
2
  *  Welcher Datentyp wird gesendet?
3
  *  siehe "Cmd_Data_Type_Enum"
4
  */
5
  enum Cmd_Data_Type_Enum  eDataType;
6
  
7
  /*
8
  *  Nachrichten Identifikation
9
  *  Die Identifikations Codes sind in 
10
  *  "Cmd_Ident_Enum" einzutragen
11
  */
12
  enum Cmd_Ident_Enum  eMessageID;

Eine Frage..
Ist "enum Cmd_Data_Type_Enum eDataType" das jetzt eine Variable oder 
einfach nur eine Aufzählung "enum". Ich kann "eDataType" Werte zuweisen 
ohne das der Compiler meckert.

von Dr. Sommer (Gast)


Lesenswert?

eDataType ist eine Variable vom Typ "enum Cmd_Data_Type_Enum", für 
welche entsprechend Speicher reserviert wird.

von Peddi (Gast)


Lesenswert?

Also sollte man der auch Werte zuweisen können ( 8 Bit breit in diesem 
Fall )?

von PittyJ (Gast)


Lesenswert?

Ja

von Thomas W. (goaty)


Lesenswert?

Die Größe könnte man mit 'sizeof' abfragen, ich bin nicht sicher, je 
nach Maschine ist das auch Mal int32 oder so.

von Peter D. (peda)


Lesenswert?

Ein Enum hat standardmäßig den Typ int (16 oder 32Bit).
Mit "-fshort-enums" wird der kleinste Typ genommen, in den alle Enums 
passen.

von Dr. Sommer (Gast)


Lesenswert?

Peter D. schrieb:
> Ein Enum hat standardmäßig den Typ int (16 oder 32Bit).

Laut Standard hat "int" mindestens 16 bit. Kann also auch 64, 24 oder 29 
bits haben, nicht unbedingt nur 16 oder 32.

von fop (Gast)


Lesenswert?

Cmd_Data_Type_Enum und Cmd_Ident_Enum sind Enum-Typen.
eDataType und eMessageID sind Variablen.
Wieviel Platz der Compiler dafür lässt ist seine Sache. Die 
Kommandozeilenoption, die hier genannt wurde, bezieht sich auch auf eine 
bestimmte Compilerfamilie.
Wenn Du das Enum in eine Struct steckst, kannst Du die Anzahl der Bits 
angeben, aber dann bist Du auch in der Verantwortung, dass alle 
möglichen Werte hinein passen.

von so ist das in C (Gast)


Lesenswert?

Peddi schrieb:
> Ich kann "eDataType" Werte zuweisen
> ohne das der Compiler meckert.

Na klar, C ist ja sch...

Du kannst dem Datentyp enum einfach int zuweisen, abe auch boolean 
geht. Oder boolean einen float zuweisen. Alles erlaubt, aber natürlich 
total sinnbefreit!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

so ist das in C schrieb:

> Du kannst dem Datentyp enum einfach int zuweisen, abe auch boolean
> geht. Oder boolean einen float zuweisen. Alles erlaubt, aber natürlich
> total sinnbefreit!

Sinnbefreit ist dein Kommentar.

Ein enum ist in C ein Alias für einen Ganzzahltyp.

Wenn du einen float zuweist, wird der Inhalt des floats auf den 
Ganzzahlanteil reduziert, wie bei jeder anderen Zuweisung eines floats 
auf einen Ganzzahltyp – und nicht etwa das Bitmuster kopiert oder sowas.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.