klaus schrieb:
> Ich hatte in Erinnerung, dass der Compiler bei Bitfeldern in C die
> Reihenfolge der Elemente verändern darf, wodurch das ganze natürlich für
> den Zugriff auf Register denkbar ungeeignet wäre.
Im Prinzip: ja.
Allerdings kiffen ja auch die Compilerbauer sich nicht jeden Tag zu,
sondern allokieren die Bits normalerweise in der Reihenfolge, in der sie
definiert werden. Maximal die Reihenfolge 0->7 oder 7->0 ist
üblicherweise verschieden (wenn überhaupt)
Was allerdings ein Problem sein kann: Wenn der Compilerbauer so schlau
war, und Bits so durch die Gegend schiebt, dass er bei Mehrbitzugriffe
nicht über Bytegrenzen hinweg arbeiten muss.
> Hat sich da was
> geändert ?
Nein
> Gibt es Compiler Optionen, die das sicherstellen
Hängt vom Compiler ab.
Aber erwarte dir von einem Compiler, der nicht aussschliesslich für
µC-Belange entwickelt wurde, nicht allzuviel. Desktopprogrammierern ist
diese Reihenfolge (so sie überhaupt Bitfelder benutzen) normalerweise
schnurzegal.
> oder was
> muss man beachten wenn man Bitfelder benutzen möchte ?
IM Grunde gar nichts.
Wenn dein Compiler eine bestimmte Reihenfolge hat, und du sie kennst,
benutze sie. Wenn dir das Risiko zu gross ist, dann benutze sie nicht.
Rein von der Laufzeit her, bringen Bitfelder sowieso nichts. Auch ein
Compiler kann nicht zaubern und muss mittels Maskierungen die Bits bei
Manipulationen freischafeln. Zugegeben: Die Syntax wird mit Bitfeldern
ein wenig ansehnlicher, aber das wars dann auch schon.