rusi/include/stddef.h

82 lines
4.4 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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