enums in Bitfeldern

27/10/2013 - 18:03 von Stefan Reuther | Report spam
Hallo,

ich verwende gerne Bitfelder für enum-Typen, um Speicher zu sparen.
MyEnum bla : 8;
erzeugt typischerweise genauso effizienten Objektcode wie
MyEnum bla;
braucht aber nur eins statt (auf meinen Systemen normalerweise) vier Bytes.

Nun kommt auf einmal MISRA um die Ecke und will mir das verbieten.
Begründung: da undefiniert sei, ob Bitfelder signed oder unsigned sind,
könne man nicht im Voraus wissen, ob die Bitfeldvariable auch den
zugrundeliegenden Typ des enum aufnehmen könne, den man ja nicht kennt.

Mal abgesehen davon, dass das für einen enum mit Werten von 1-10 recht
unwahrscheinlich ist, finde ich in §9.6(4) (1998er Standard): "If the
value of an enumerator is stored into a bitfield of the same enumeration
type and the number of bits in the bitfield is large enough to hold all
the values of that enumeration type, the original enumerator value and
the value of the bitfield shall compare equal.".

Daraus entnehme ich, dass der Compiler das Bitfeld derart zu realisieren
hat, dass alle Enum-Werte hineinpassen, unabhàngig davon, was er
normalerweise als zugrundeliegenden Typ gewàhlt hat, meine Konstruktion
also eigentlich sicher ist.

Übersehe ich was?


Stefan
 

Lesen sie die antworten

#1 Gregor Szaktilla
01/11/2013 - 15:25 | Warnen spam
Am 27.10.2013 18:03, schrieb Stefan Reuther:
Übersehe ich was?



Ich bin ja noch halbwegs Neuling, was derlei spezielle Dinge angeht,
aber soweit ich das verstehe, übersiehst Du nichts.

Gruß

Gregor

Ähnliche fragen