main
の機能の前にいくつかのことをしたいと思います。私は複数のソースファイルを持っています。各ファイルには、main
より前に行う必要のある作業があります。これは、C++には問題なかったが、C++ではC.Cでメインの前にいくつかの関数を呼び出す
との問題、これは、2つの方法で行うことができます。グローバルクラス/構造体のコンストラクタを活用
- 。例えば、グローバル変数
に関数を呼び出す
static const int __register_dummy_ = __AddRegisterMetaInfo(...);
しかし、Cのいずれかの方法では不可能です。明らかに、コンストラクタはありません。したがって、最初の選択肢は本質的に不可能です。
私は2番目のオプションは可能だと思っていましたが、Cでコンパイルされていないと考えました(Visual C++でのみテストしましたが、C2099です)。 Cでは、自動ではない変数への定数のみが許可されます。
mainの前にいくつかの関数を呼び出す方法はありますか?
EDIT:多くの人々はちょうど私が本当にやりたいことを誤解だと思われます。この質問を簡単な方法で書いて申し訳ありません。
私がしなければならなかったのは、MFC's approachのように、ある種のC++ランタイムクラス情報機能を実装することでした。このアプローチでは、私はすべてのソースコードからいくつかの情報を得る必要があります。たとえば、各ソースファイルにクラスの定義があり、すべての情報(クラス名や親クラスなど)を確認したいとします。最も簡単な方法は、各ファイルに静的コンストラクタを配置し、各コンストラクタがグローバルデータ構造にアクセスしてその情報を登録する方法です。しかし、私はC言語でも同様のことを実装する方法を探したかったので、単にmain
のpre_main_job
を呼び出すことは私には答えられません。
この静的コンストラクタの悪用は、LLVMコンパイラスイートでも確認できます。各最適化/分析機能は、パスとして実装されます。これらのすべてのパスは、静的コンストラクタを介して登録されます。
「I_will_explode_if_you_call_me_from_main」と呼ばれる機能はありますか? –
好奇心のために、なぜこれをやりたいのですか? –
C++コンパイラをより優れたCコンパイラとして使用することが、回避策の1つです(またはソリューションに応じて)。静的初期化子のような機能をチェリーピックすることができます。 –