Автор описывает четыре уровня реализации обобщённых структур на C, начиная с макросов и заканчивая проверкой типов на этапе компиляции.
Уровень 0 (Generic Headers) использует многократное включение заголовка, но приводит к раздутому бинарнику, дублированию кода и плохой подсказке IDE.
Уровень 1 (void*) обеспечивает обобщённость без проверки типов, требует двойного выделения памяти и наносит удар по производительности.
Уровень 2 (Inline storage) применяет гибкий массив в структуре узла для одной аллокации и оптимальной работы с кэш-памятью, но требует передачи размера.
Уровень 3 (Type Checking) вводит union с полем payload и макрос list_prepend, позволяя компилятору проверять соответствие типов без накладных затрат на хранение.
Предложены альтернативы для старых компиляторов без __typeof__ и решение проблемы передачи переменных типа через typedef.
Метод универсален и применим к любым структурам данных, включая хеш-таблицы с несколькими типами ключей и значений.
Get notified when new stories are published for "🇷🇺 Hacker News Русский"