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

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <stddef.h>

       size_t offsetof(type, member);

ОПИСАНИЕ

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

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

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

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

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

СТАНДАРТЫ

       C11, POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001, C89.

ПРИМЕРЫ

       В  системах  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[];
           };

           /* Output is compiler dependent */

           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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                     offsetof(3)