如何退出函数,但不退出main()

how to exit from a function but not from main()

本文关键字:退出 main 函数 何退出      更新时间:2023-10-16

C/c++是否支持从子程序函数(即非main)终止程序?到目前为止,我只发现exit和abort允许用户终止当前函数或进程。如果我不在main函数中,有没有办法终止整个程序?

如果您不在main()和其他函数中,那么您也可以调用exit()abort(),它将终止整个进程。

exit()将执行所需的清理,而abort()将不执行。

exit(0) or exit(1)

如果是0EXIT_SUCCESS,则表示成功。如果是EXIT_FAILURE,表示失败。

ref: See here

既然你说的是c++,考虑 std::terminate

u now, for “ C/c++是否支持从子程序函数(即非main)终止程序?

默认情况下std::terminate调用abort,但这可以通过通过std::set_terminate安装处理程序来配置

void exit (int status)

上述方法正常终止进程,为终止程序执行定期清理。

正常程序终止执行以下操作(顺序相同):

  1. 与当前线程关联的具有线程存储时间的对象被销毁(仅限c++ 11)。

  2. 具有静态存储时间的对象被销毁(c++),调用在atexit中注册的函数。

  3. 所有C流(打开函数in)被关闭(和刷新,如果缓冲),并删除所有使用tmpfile创建的文件。

之后Control返回到主机环境。

当它终止调用进程时,因为你的函数是同一进程的一部分,所以在其中使用exit()将终止程序。

只有在main函数中调用该函数时才有可能。从你想要终止程序的那个函数返回一个值用于终止程序,例如-1。

的例子:

void main()
{
    //Call to a function
    int i = functionFromMain();
    if(i == -1)
    {
        //Terminate Program
    }
}