Wird der folgende Code garantiert normal und erfolgreich beendet?
%Vor%Beim Beantworten einer anderen Frage wurde die Möglichkeit eröffnet, dass die Zuweisung an ein benanntes Bit-Feld in einer Struktur ebenfalls erfolgt enthält ein unbenanntes Bit-Feld kann dazu führen, dass beliebige Daten in diese Bits geschrieben werden. C.11 §6.7.2.1 ¶12 besagt:
Eine Bitfelddeklaration ohne Deklarator, aber nur ein Doppelpunkt und eine Breite, zeigt an unbenanntes Bit-Feld.
Daraus ergibt sich, dass ein unbenanntes Bit-Feld nur ein normales Bit-Feld ist, mit dem einzigen Unterschied, dass der Wert in diesen Bits nicht direkt mit dem Namen erhalten werden kann. Ist es einer Implementierung erlaubt, aus der "as-if" Logik zu extrapolieren und willkürliche Daten in diesen Bits zuzuordnen?
Ja, ich denke, eine Implementierung kann beliebige Bits in ein unbenanntes Bitfeld schreiben. Ich denke, in Fußnote 126 wird lediglich die Absicht dargelegt, warum unbenannte Bitfelder mit einer Breite größer als 0 eingeführt wurden:
Ein unbenanntes Bitfeldstrukturelement ist zum Auffüllen von nützlich konform zu extern auferlegten Layouts.
Im Grunde genommen haben unbenannte Bitfelder die gleiche Bedeutung wie Füllbits. Sie können sich nicht auf ihren Inhalt verlassen.
Wenn Sie zulassen, dass die Implementierung ein unbenanntes Bitfeld grundsätzlich ignoriert, wenn Sie in ein benachbartes benanntes Bitfeld a
schreiben, wird die Handhabung dieses Feldes a
erheblich vereinfacht. Der aktuelle Wert des unbenannten Feldes muss nicht gelesen werden und der Schreibvorgang kann atomar auf einmal ausgeführt werden. Genau wie für Füllbits, die in der Struktur enthalten sein könnten.
Tags und Links c language-lawyer c11