offsetof(3)

BEZEICHNUNG
offsetof - Versatz eines Strukturelements

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <stddef.h>

size_t offsetof(Typ, Element);

BESCHREIBUNG
Das Makro offsetof() liefert den Versatz des Feldes Element vom Anfang der Struktur Typ.

Dieses Makro ist nützlich, da sich die Größen der Felder, die eine Struktur aufbauen, zwischen Implementierungen unterscheiden können und Compiler eine verschiedene Anzahl an Auffüll-Bytes zwischen Feldern hinzufügen können. Daher ist der Versatz eines Elementes nicht notwendigerweise durch die Summe der Größen der vorherigen Elemente gegeben.

Falls Element nicht an einer Byte-Grenze ausgerichtet ist (d.h. es ein Bit-Feld ist), führt dies zu einem Compiler-Fehler.

RÜCKGABEWERT
offsetof() liefert den Versatz des angegebenen Elements innerhalb des angegebenen Typs in Byte-Einheiten zurück.

STANDARDS
C11, POSIX.1-2008.

GESCHICHTE
POSIX.1-2001, C89.

BEISPIELE
Auf einem Linux/i386-System produziert das nachfolgende Programm die folgende Ausgabe, wenn es mit den Standardoptionen von gcc(1) kompiliert wird:

    $ ./a.out
    Versatz: i=0; c=4; d=8 a=16
    sizeof(struct s)=16

  Programmquelltext
    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>

    int
    main(void)
    {
        struct s {
            int i;
            char c;
            double d;
            char a[];
        };

        /* Ausgabe ist Compiler-abhängig */

        printf("Versatz: i=%zu; c=%zu; d=%zu a=%zu\n",
               offsetof(struct s, i), offsetof(struct s, c),
               offsetof(struct s, d), offsetof(struct s, a));
        printf("sizeof(struct s)=%zu\n", sizeof(struct s));

        exit(EXIT_SUCCESS);
    }

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).