В Linux и GCC есть constructor-функции - они запускаются автоматически до входа в
main().Выглядит почти как магия:
__attribute__((constructor))Такую функцию не нужно вызывать вручную. Компилятор сам пометит её как код, который должен выполниться при старте программы.
Где это используется:
- инициализация глобального состояния
- подготовка shared libraries
- регистрация плагинов
- настройка runtime-окружения
- выполнение служебного кода до основной логики
Именно поэтому в C-программе не всегда всё начинается с
main().Иногда до него уже кто-то успел поработать.
