是否有可能在运行代码时调用main()之后的其他方法/指令

时间:2013-02-01 17:31:03

标签: c++ invoke main

在调用int main()之后是否有可能运行任何其他指令?

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

在main()中调用之后,调用cout&lt;&lt;“b”;在某个地方之后。无论如何都无法改变main()

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

你可以把你的最后一部分放在atexit()。 它将在程序终止时运行,即在您对main()的调用完成后运行。

您也可以拥有多个atexit

  

如果不同的调用指定了多个atexit函数   对于这个函数,它们都以相反的顺序作为堆栈执行   (即指定的最后一个函数是第一个执行的函数   出口)。

答案 2 :(得分:2)

是的,定义一个在析构函数中执行cout << "b"的类,然后定义该类的全局实例。

答案 3 :(得分:2)

简而言之,很少有选择。您可以使用atexit()在主要退出后发生某些事情,或者您可以拥有一个全局对象,在主要退出后调用析构函数。但是主要的结束正式结束了你的计划。