2016-07-22 8 views
2

Es gibt offsetof Makro und sizeof-Operator für Strukturen und Klassen.
Gibt es eine Möglichkeit eine ähnliche Funktionalität für Bitfelder zu erhalten, so dass die Bit und Größe Bitoffset von Bitfeld Mitglieder abgefragt werden können?offsetof und sizeof wie Funktionalität für Bitfelder

Die sizeof könnte mit #define field_name_size n emuliert, aber für offsetof Ich fürchte, es wäre zu umständlich geworden #define field_name_offset, zu verwenden, da dann scheint eine etwas komplexe Formel zu verwenden, zu haben für alle vorhergehenden Mitglieder im Bitfeld berücksichtigen.

In bestimmten Fällen würde man die Notwendigkeit überwinden, den Code manuell mit Bitfelddefinitionen synchron zu halten, was fehleranfällig ist.
Ein Beispiel wären verblockte Schreibvorgänge an Mitglieder von Bitfeldern, wo man eine benutzerdefinierte Funktion zum Schreiben an solche Mitglieder verwenden muss, da der Compiler dies nicht anbietet.
Darüber hinaus verstehe ich, dass Compiler Bit-Feld-Layout ein bisschen anders implementieren können. Die Verfügbarkeit solcher Makros/Operatoren würde die Auswirkungen dieses Problems ebenfalls verringern.

+2

_ "Gibt es eine Möglichkeit, eine ähnliche Funktionalität für Bitfelder zu erhalten, so dass Bit-Offset und Bit-Größe von Bit-Feld-Mitgliedern abgefragt werden können?" _ Mir ist das nicht bekannt. –

+0

what @ πάνταῥεῖ sagt –

+0

@Cheers So sind wir mindestens zwei ;-) ... –

Antwort

2

Gibt es eine Möglichkeit, ähnliche Funktionalität für Bitfelder zu erhalten, so dass Bit-Offset und Bit-Größe von Bit-Feld-Mitgliedern abgefragt werden können?

Nein, es gibt keinen Weg, dies zu erreichen. Bitgrößen-Offsets können nicht von Bitfeldelementen abgeleitet werden.

Auch sizeof() wird immer die Größe des zugrunde liegenden Typs zurückgeben, das Minimum ist char, also 1 ist die Mindestgröße, die Sie abrufen werden.

0

Nein, es gibt keine. Und das ist einer der vielen Gründe, warum Sie Bitfelder vermeiden sollten und Ihre eigenen Bit-Arrays und ähnliches mit arithmetischen und vollständigen, adressierbaren Ganzzahl-Typen erstellen sollten.