17.14 Das offsetof-Makro
 
Um den Abstand der einzelnen Strukturelemente in Bytes zu ermitteln, kann das Makro offsetof(), welches in der Headerdatei <stddef.h> deklariert ist, verwendet werden. Hier 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 als zweites Argument angegebenen Strukturelement. 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 Byte vom Anfang der Struktur bis zum jeweiligen Strukturelement.
|