rusi/include/stddef.h

82 lines
4.4 KiB
C
Raw Permalink Normal View History

// 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