Веб-версияОткрыть в Telegram

ПостНаследование в чистом C: одно правило, и всё работает

5 октября 2026
Б
Библиотека С# С++
Фотография
нажмите — покажем
Наследование в чистом C: одно правило, и всё работает В C нет классов, но наследование можно собрать вручную. Правило одно: родительская структура должна стоять первым полем дочерней. struct Animal { int age; char name[32]; }; struct Dog { struct Animal base; // обязательно первым char breed[32]; }; struct Dog d = { {3, "Rex"}, "Labrador" }; print_animal((struct Animal *)&d); // работает Почему это законно: стандарт C гарантирует, что в начале структуры нет паддинга, а указатель на структуру, приведённый к нужному типу, указывает на её первое поле. Поэтому &d и &d.base это один и тот же адрес, и функция, которая ждёт Animal*, спокойно работает с Dog. Это не трюк из головоломок, а основа реальных систем. Так устроены объекты в CPython, где каждая структура начинается с PyObject_HEAD, так же работают GObject в GTK и многие структуры ядра Linux. Если родитель лежит не первым полем, ядро достаёт его через макрос container_of. Есть важная оговорка: обратное приведение Animal* в Dog* корректно, только если объект действительно Dog. Компилятор этого не проверит, и ошибка здесь превращается в тихое повреждение памяти.
7 · 251 ·

Рядом в ленте

ББиблиотека С# С++UTF-8-декодер на C: таблица и несколько строк кода Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA). Он обрабатывает байты по одному, сББиблиотека С# С++🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собеседование: Senior C# разработчик проведёт его в прямом эфире. Можно посм
это сообщение
ББиблиотека С# С++Rust vs Go vs C# в 2026: почему наивный Rust проиграл Go Сравнение производительности Rust, Go и C# в 2026 году: наш тест на аллокациях, где наивный Rust уступи
ББиблиотека С# С++Библиотека С# С++@cpluscsharp · канал · Технологии
10 080подписчиков621средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем