【问题标题】:Is there possibility to invoke other methods/instructions AFTER main() when running the code运行代码时是否有可能在 main() 之后调用其他方法/指令
【发布时间】:2013-02-01 17:31:03
【问题描述】:

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

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

在 main() 调用之后,调用 coutmain()whatsoever。

【问题讨论】:

标签: c++ invoke main


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    你也可以有多个atexits。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2013-01-17
          • 1970-01-01
          • 2016-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-07
          • 1970-01-01
          相关资源
          最近更新 更多