15.14 Das »offsetof«-Makro
Um den Abstand der einzelnen Strukturelemente in Bytes zu ermitteln, können Sie das Makro offsetof() verwenden, das in der Headerdatei <stddef.h> deklariert ist. Hier sehen Sie die Syntax dazu:
#include <stddef.h> size_t offsetof(struktur, name_strukturelement);
Das Makro liefert, wie schon erwähnt, den Abstand vom Anfang der Struktur bis zu dem Strukturelement, das als zweites Argument angegeben ist. Ist das Makro auf Ihrem System nicht vorhanden, so lässt es sich ohne großen Aufwand selbst implementieren:
#define offsetof(struct_type, member) \ (size_t) &(((struct_type *)0)->member)
Ein einfaches Listing dazu:
/* offsetof.c */ #include <stdio.h> #include <stdlib.h> #include <stddef.h> #define MAX 15 struct data{ char datei[MAX]; unsigned int flag; char eigentuemer[MAX]; char passwort[MAX]; }; int main(void) { struct data newfile = { "testfile", 0, "its_me", "believe" }; printf("Vom Anfang zur Strukturvariable flag : %d Bytes\n", offsetof(struct data, flag)); printf("Vom Anfang zur Strukturvariable owner : %d Bytes\n", offsetof(struct data, eigentuemer)); printf("Vom Anfang zur Strukturvariable passwort: %d Bytes\n", offsetof(struct data, passwort)); return EXIT_SUCCESS; }
Sie erhalten hier jeweils den Abstand in Bytes vom Anfang der Struktur bis zum jeweiligen Strukturelement.
Hinweis |
Beachten Sie, dass das Makro offsetof nicht bei Bitfeldern funktioniert, da Bitfelder keine adressierbare Speicherstelle belegen. |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.