// stddef.h - Стандартные определения типов и макросов // // Этот заголовочный файл определяет фундаментальные типы данных и макросы, // используемые в программах на языке C. Все размеры и типы соответствуют // стандарту C11 для архитектуры x86-64 (LP64 модель данных). // // Поддерживаются как стандартные идентификаторы (NULL, size_t, offsetof), // так и русские синонимы (НУЛЬ, размер, смещение). #ifndef _STDDEF_H_RU #define _STDDEF_H_RU // ============================================================ // Нулевой указатель // ============================================================ // Константа нулевого указателя. // Используется для обозначения недействительного или неинициализированного // указателя. Может быть приведён к любому типу указателя. #define NULL ((void *)0) // ============================================================ // Фундаментальные типы данных // ============================================================ // Тип для представления размеров объектов в байтах. // Беззнаковое целое, способное вместить размер любого объекта. // На x86-64 это 64-битное беззнаковое целое. typedef unsigned long size_t; // Тип для представления разности двух указателей. // Знаковое целое, способное вместить разность любых двух указателей // в пределах одного массива. На x86-64 это 64-битное знаковое целое. typedef long ptrdiff_t; // Тип для представления широких символов (wide characters). // Используется для работы с Unicode в кодировках UTF-16/UTF-32. // На x86-64 Linux это 32-битное беззнаковое целое (UTF-32). typedef unsigned int wchar_t; // Тип с максимальным требованием выравнивания. // Гарантирует, что любой объект этого типа будет выровнен // по максимальной границе, требуемой любым базовым типом. typedef long max_align_t; // ============================================================ // Макрос для вычисления смещения члена структуры // ============================================================ // Возвращает смещение в байтах указанного члена внутри структуры. // Использует технику создания указателя по нулевому адресу // для вычисления смещения без создания реального объекта. // // Пример использования: // struct Point { int x; int y; }; // size_t offset = offsetof(struct Point, y); // вернёт 4 #define offsetof(type, member) ((size_t)&(((type *)0)->member)) // ============================================================ // Русские синонимы для удобства // ============================================================ // Нулевой указатель (русский синоним) #define НУЛЬ NULL // Тип для размеров (русский синоним) typedef size_t размер_t; // Тип для разности указателей (русский синоним) typedef ptrdiff_t разность_t; // Тип для широких символов (русский синоним) typedef wchar_t шсимвол_t; // Тип с максимальным выравниванием (русский синоним) typedef max_align_t макс_выравн_t; // Макрос вычисления смещения (русский синоним) // Пример: размер_t смещ = смещение(struct Точка, y); #define смещение(type, member) offsetof(type, member) #endif // _STDDEF_H_RU