main
関数の前にいくつかのことをしたいのですが。複数のソースファイルがあります。各ファイルには、前に実行する必要のある作業がいくつかありますmain
。C ++では問題ありませんでしたが、Cでは問題がありました。
C ++では、これは2つの方法で実行できます。
- グローバルクラス/構造体のコンストラクターを利用します。
- グローバル変数への関数の呼び出し
例えば、static const int __register_dummy_ = __AddRegisterMetaInfo(...);
ただし、Cではどちらの方法も不可能です。明らかに、コンストラクターはありません。したがって、最初のオプションは本質的に不可能です。
2番目のオプションは可能だと思いましたが、Cではコンパイルされませんでした(Visual C ++でのみテストしました。C2099が提供されます)。Cは、定数から非自動変数のみを許可します。
mainの前にいくつかの関数を呼び出す方法はありますか?
編集:多くの人が私が本当にやりたいことを誤解しているようです。この質問を簡単な方法で書いて申し訳ありません。
私がする必要があるのは、MFCのアプローチと同じように、一種のC++ランタイムクラス情報機能を実装することです。このアプローチでは、すべてのソースコードからいくつかの情報を取得する必要があります。たとえば、各ソースファイルにクラスの定義があり、すべての情報(たとえば、クラス名と親クラス)を表示したいとします。最も簡単な方法は、静的コンストラクターを各ファイルに配置することです。各コンストラクターは、グローバルデータ構造にアクセスし、その情報を登録します。しかし、私はCで同様のことを実装する方法も見つけたかったのです。したがって、単にpre_main_job
inを呼び出すだけmain
では答えにはなりません。
この静的コンストラクターの乱用は、LLVMコンパイラースイートでも見られることに注意してください。各最適化/分析機能はパスとして実装されます。これらのパスはすべて、静的コンストラクターを介して登録されます。