82 lines
4.4 KiB
C
82 lines
4.4 KiB
C
// 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
|