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



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

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

在main()中的调用之后,有对cout<<"b"的调用;之后的某个地方。没有任何变化main()

静态对象的析构函数和在 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

你可以

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

您也可以有多个atexit

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

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

简而言之,几乎没有选择。您可以使用atexit()在主出口后发生某些事情,也可以拥有一个全局对象,其析构函数在主出口后调用。但是main的结束正式是你的程序的结束。

相关内容

最新更新