函数
<cstdlib>

exit

void exit (int status);
[[noreturn]] void exit (int status);
终止调用进程
正常终止进程,为终止程序执行常规清理。

正常的程序终止会执行以下操作(按相同顺序):
  • 销毁与当前线程关联的、具有线程存储期的对象(仅限 C++11)。
  • 销毁具有静态存储期的对象(C++),并调用通过 atexit 注册的函数。
  • 所有 C 流(使用 <cstdio> 中的函数打开)都会被关闭(如果带缓冲,则会被刷新),所有用 tmpfile 创建的文件都会被移除。
  • 控制权返回给宿主环境。

请注意,调用 exit 不会销毁具有自动存储期的对象(C++)。

如果 status 为零或 EXIT_SUCCESS,则向宿主环境返回一个“成功终止”状态。
如果 statusEXIT_FAILURE,则向宿主环境返回一个“不成功终止”状态。
否则,返回的状态取决于系统和库的实现。

要了解不执行上述清理的类似函数,请参阅 quick_exit

参数

状态
状态码。
如果此值为 0EXIT_SUCCESS,表示成功。
如果此值为 EXIT_FAILURE,表示失败。

返回值

无(该函数永不返回)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* exit example */
#include <stdio.h>      /* printf, fopen */
#include <stdlib.h>     /* exit, EXIT_FAILURE */

int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt","r");
  if (pFile==NULL)
  {
    printf ("Error opening file");
    exit (EXIT_FAILURE);
  }
  else
  {
    /* file operations here */
  }
  return 0;
}

数据竞争

调用此函数会销毁所有具有静态存储期的对象:一个运行多线程的程序不应调用 exit(请参阅 quick_exit 以了解不影响静态对象的类似函数)。

异常 (C++)

无异常保证:此函数从不抛出异常。

如果上述程序终止过程中抛出异常,terminate 会被自动调用。

另见