Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       offsetof - смещение элемента структуры

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <stddef.h>

       size_t offsetof(type, member);

ОПИСАНИЕ

       Макрокоманда offsetof() возвращает смещение поля member от начала структуры type.

       Эта  макрокоманда удобна, так как размеры полей, составляющих структуру, могут значительно
       изменяться в зависимости от реализаций, а компиляторы могут добавлять различное количество
       дополнительных  байт  между  полями.  Следовательно,  смещение элемента не всегда является
       суммой размеров предыдущих элементов.

       Если member не выровнен по границе байта (т.е., если  это  битовое  поле),  то  компилятор
       вернёт ошибку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       Функция  offsetof()  возвращает смещение в байтах указанного поля member внутри указанного
       type.

СТАНДАРТЫ

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

ПРИМЕРЫ

       В системах Linux/i386 при использовании компилятора  gcc(1)  с  параметрами  по  умолчанию
       нижеследующая программа дает следующий результат:

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

   Исходный код программы

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

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

           /* Вывод зависит от компилятора */

           printf("offsets: 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);
       }

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,  Konstantin  Shvaykovskiy  <kot.shv@gmail.com>,  Yuri  Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.