重複の可能性:
main関数に入る前に、C ++で何かを印刷できますか?
int main()が呼び出される前に他の命令を実行する可能性はありますか?
int main(){cout<<"a";}
そして、main()でのその呼び出しの前に、cout<<"b"の呼び出しがあります。以前のどこか。たぶん、この#defineのことが役立つでしょう。
重複の可能性:
main関数に入る前に、C ++で何かを印刷できますか?
int main()が呼び出される前に他の命令を実行する可能性はありますか?
int main(){cout<<"a";}
そして、main()でのその呼び出しの前に、cout<<"b"の呼び出しがあります。以前のどこか。たぶん、この#defineのことが役立つでしょう。
は必要ありませんdefine
。グローバル オブジェクトを (同じファイル内に) 作成するだけで、その ctor (または、関数の呼び出しなど、初期化に使用するもの) が main が呼び出される前に実行されます。
編集: 同様に、これらのグローバル オブジェクトはメインの終了後に破棄されるため、そのデストラクタはその時点で実行されます。
グローバルオブジェクトは、main()が実行される前に構築されます。したがって、クラスを定義し、そのコンストラクターにコードを配置してから、そのクラスのグローバルインスタンスを宣言できます。
class temp
{
public:
temp()
{
cout << "before main" << endl;
}
~temp()
{
cout << "after main" << endl;
}
};
temp t;
int main()
{
cout << "in main" << endl;
return 0;
}
グローバル変数も、main()が実行される前に初期化されます。@jrokが示したように、値を返す関数を定義してから、その関数を呼び出し、その宣言でグローバル変数に値を割り当てることができます。
一部のコンパイラは#pragma startup
、起動時にユーザー定義関数を実行するステートメント(および#pragma exit
シャットダウンに対応するステートメント)もサポートしています。
void beforeMain()
{
cout << "before main" << endl;
}
#pragma startup beforeMain
void afterMain()
{
cout << "after main" << endl;
}
#pragma exit afterMain
int main()
{
cout << "in main" << endl;
return 0;
}