0

int main() が呼び出された後に他の命令を実行する可能性はありますか?

int main(){cout<<"a";}

main() でのその呼び出しの後に、cout<<"b"; の呼び出しがあります。あとどこか。int に変更はありませmain()ん。

4

4 に答える 4

7

静的オブジェクトのデストラクタ、および に登録された関数はstd::atexit、終了後に実行されmainます。

#include <iostream>
#include <cstdlib>

struct S {~S() {std::cout << "c";}};
void f() {std::cout << "b";}

S s;

int main() {
    std::atexit(f);
    std::cout << "a";
}

出力: abc

于 2013-02-01T17:33:00.443 に答える
6

最後の部分を に入れることができますatexit()。プログラムの終了時、つまり main() の呼び出しが完了した後に実行されます。

を複数持つこともできますatexit

この関数への異なる呼び出しによって複数の atexit 関数が指定されている場合、それらはすべてスタックとして逆の順序で実行されます (つまり、最後に指定された関数が終了時に最初に実行されます)。

于 2013-02-01T17:32:42.593 に答える
2

はい、cout << "b"デストラクタで実行するクラスを定義してから、そのクラスのグローバル インスタンスを定義します。

于 2013-02-01T17:32:30.037 に答える
2

要するに、非常に少ないオプションです。メインの終了後に何かを実行するために使用atexit()したり、メインの終了後にデストラクタが呼び出されるグローバル オブジェクトを作成したりできます。しかし、main の終了は正式にはプログラムの終了です。

于 2013-02-01T17:32:55.310 に答える