Scroll to navigation

OFFSETOF(3) Manualul programatorului Linux OFFSETOF(3)

NUME

offsetof - decalajul unui membru al structurii

REZUMAT

#include <stddef.h>
size_t offsetof(type, member);

DESCRIERE

Macro offsetof() returnează decalajul câmpului member de la începutul structurii type.

Această macro este utilă deoarece dimensiunile câmpurilor care compun o structură pot varia de la o implementare la alta, iar compilatorii pot insera numere diferite de octeți de umplutură între câmpuri. În consecință, decalajul unui element nu este neapărat dat de suma dimensiunilor elementelor anterioare.

Se va produce o eroare de compilare dacă member nu este aliniat la o limită de octet (de exemplu, este un câmp de biți).

VALOAREA RETURNATĂ

offsetof() returnează decalajul membrului member dat în cadrul tipului type dat, în unități de octeți.

ÎN CONFORMITATE CU

POSIX.1-2001, POSIX.1-2008, C89, C99.

EXEMPLU

Pe un sistem Linux/i386, atunci când este compilat folosind opțiunile implicite gcc(1), programul de mai jos produce următoarea ieșire:


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

Sursa programului

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{

struct s {
int i;
char c;
double d;
char a[];
};
/* Ieșirea este dependentă de compilator */
printf("decalaje: i=%zd; c=%zd; d=%zd a=%zd\n",
offsetof(struct s, i), offsetof(struct s, c),
offsetof(struct s, d), offsetof(struct s, a));
printf("sizeof(struct s)=%zd\n", sizeof(struct s));
exit(EXIT_SUCCESS); }

COLOFON -- NOTĂ FINALĂ

Această pagină face parte din versiunea 4.16 a proiectului Linux man-pages. O descriere a proiectului, informații despre raportarea erorilor și cea mai recentă versiune a acestei pagini pot fi găsite la https://www.kernel.org/doc/man-pages/.

TRADUCERE

Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

15 septembrie 2017 GNU