offsetof
| Definiert im Header <stddef.h> |
||
| #define offsetof(type, member) /*implementationsspezifisch*/ |
||
Das Makro offsetof erweitert sich zu einem ganzzahligen konstanten Ausdruck vom Typ size_t, dessen Wert der Offset in Bytes vom Anfang eines Objekts vom angegebenen Typ zu seinem angegebenen Unterobjekt ist, einschließlich etwaiger Auffüllungen (Padding).
Gegeben sei ein Objekt o vom Typ type mit statischer Speicherdauer. Dann muss &(o.member) ein Adresskonstanten-Ausdruck sein und auf ein Unterobjekt von o zeigen. Andernfalls ist das Verhalten undefiniert.
|
Wenn der in |
(seit C23) |
Inhalt |
[bearbeiten] Hinweise
Wenn offsetof auf ein Bitfeld-Mitglied angewendet wird, ist das Verhalten undefiniert, da die Adresse eines Bitfeldes nicht genommen werden kann.
member muss kein direktes Mitglied sein. Es kann sich auf ein Unterobjekt eines gegebenen Mitglieds beziehen, wie z.B. ein Element eines Array-Mitglieds.
Obwohl in C23 festgelegt ist, dass die Angabe eines neuen Typs, der ein nicht in Klammern gesetztes Komma in offsetof enthält, undefiniertes Verhalten darstellt, wird eine solche Verwendung im Allgemeinen auch in früheren Modi nicht unterstützt: offsetof(struct Foo { int a, b; }, a) schlägt in der Regel beim Kompilieren fehl.
|
typeof kann verwendet werden, um die negativen Auswirkungen von Kommas bei der Definition eines neuen Typs zu vermeiden, z.B. ist offsetof(typeof(struct { int i, j; }), i) wohldefiniert. |
(seit C23) |
[bearbeiten] Beispiel
Mögliche Ausgabe
the first element is at offset 0 the double is at offset 8
[bearbeiten] Fehlerberichte
Die folgenden verhaltensändernden Defect Reports wurden rückwirkend auf zuvor veröffentlichte C-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| DR 496 | C89 | nur Strukturen und Strukturmitglieder wurden erwähnt | unions und andere Unterobjekte werden ebenfalls unterstützt |
[bearbeiten] Siehe auch
| vorzeichenloser Ganzzahltyp, der vom Operator sizeof zurückgegeben wird (typedef) | |
| C++ Dokumentation für offsetof
| |