3

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

4

5 回答 5

5

如果您不在main()其他功能中,那么您也可以调用exit(),否则abort()它将终止您的整个过程。

哪里exit()需要清理哪里不需要清理abort()

于 2013-04-08T04:29:10.960 回答
1
exit(0) or exit(1)

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

参考:见这里

于 2013-04-08T04:27:51.663 回答
1

既然您在谈论 C++,请考虑std::terminate

u 现在,“C/C++ 是否支持从子程序函数终止程序,即不是主程序?”

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

于 2013-04-08T04:40:14.193 回答
0

无效退出(int状态)

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

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

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

  2. 具有静态存储持续时间的对象将被销毁 (C++),并调用使用 atexit 注册的函数。

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

之后,控制返回到主机环境。

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

于 2013-04-08T04:43:58.333 回答
-2

只有从主函数调用该函数才有可能。并且从您要终止程序的那个函数返回一个用于终止程序的值,例如 -1。

例子:

void main()
{
    //Call to a function
    int i = functionFromMain();
    if(i == -1)
    {
        //Terminate Program
    }
}
于 2013-04-08T04:31:40.173 回答