Я хотел бы сделать кое-что перед функцией main
. У меня есть несколько исходных файлов. В каждом файле есть некоторая работа, которую необходимо выполнить до main
. Это не было проблемой в C ++, но проблематично в C.
В C ++ это можно сделать двумя способами:
- Использование конструктора глобального класса / структуры.
- Вызов функции для глобальной переменной
Например, static const int __register_dummy_ = __AddRegisterMetaInfo(...);
Однако в Си оба пути невозможны. Очевидно, что нет конструктора. Итак, первый вариант по своей сути невозможен.
Я думал, что второй вариант возможен, но не скомпилирован в C (я тестировал только с Visual C ++. Он дает C2099 .). C допускает только константу неавтоматической переменной.
Есть ли способ вызвать некоторые функции перед main?
РЕДАКТИРОВАТЬ : Кажется, многие люди просто неправильно поняли, что я действительно хотел сделать. Извините за написание этого вопроса в упрощенном виде.
Что мне нужно было сделать, это реализовать своего рода информационную функцию класса времени выполнения C ++, точно так же, как подход MFC . При таком подходе мне нужно получить некоторую информацию из всего исходного кода. Например, скажем, каждый исходный файл имеет определение класса, и я хотел бы видеть всю информацию (например, имена классов и родительский класс). Самый простой способ - поместить статический конструктор в каждый файл, и каждый конструктор получает доступ к глобальной структуре данных и регистрирует свою информацию. Но я также хотел найти способ реализовать аналогичную вещь в C. Поэтому простой вызов pre_main_job
в main
не может быть ответом для меня.
Обратите внимание, что это злоупотребление статическим конструктором также можно найти в наборе компиляторов LLVM. Каждая функция оптимизации / анализа реализована в виде прохода. Все эти проходы регистрируются через статический конструктор.