exit, _Exit, _exit

终止调用进程。 exit 函数会在清除后终止调用进程; _exit_Exit 会立即终止调用进程。

注意

请勿使用此方法关闭通用 Windows 平台 (UWP) 应用,除非在测试或调试方案中。 根据 Microsoft Store 策略,禁止以编程或 UI 方式关闭 Store 应用。 有关详细信息,请参阅 UWP 应用生命周期。 有关 UWP 应用的详细信息,请参阅通用 Windows 平台文档

语法

void exit(
   int const status
);
void _Exit(
   int const status
);
void _exit(
   int const status
);

参数

status
退出状态代码。

备注

exit_Exit_exit 函数会终止调用进程。 exit 函数调用线程本地对象的析构函数,然后按照后进先出 (LIFO) 顺序调用由 atexit_onexit注册的函数,接着在函数终止进程之前刷新所有文件缓冲区。 _Exit_exit 函数会终止进程,同时无需销毁线程本地对象或处理 atexit_onexit 函数,且无需刷新流缓冲区。

尽管 exit_Exit_exit 调用不返回值,status 中的值在进程退出后提供给主机环境或等待调用进程(如果存在)。 通常情况下,调用方将 status 值设置为 0 来指示正常退出,或设置为其他值来指示错误。 status 值可用于操作系统批处理命令 ERRORLEVEL ,并且由两个常量之一表示: EXIT_SUCCESSEXIT_FAILURE,前者表示值为 0,后者表示值为 1。

exit_Exit_exitquick_exit_cexit_c_exit 函数的行为如下:

函数 说明
exit 执行完整的 C 库终止过程,终止进程,并向主机环境提供提供的状态代码。
_Exit 执行最少的 C 库终止过程,终止进程,并向主机环境提供提供的状态代码。
_exit 执行最少的 C 库终止过程,终止进程,并向主机环境提供提供的状态代码。
quick_exit 执行快速的 C 库终止过程,终止进程,并向主机环境提供提供的状态代码。
_cexit 执行完整的 C 库终止过程并返回给调用方。 不终止进程。
_c_exit 执行最少的 C 库终止过程并返回给调用方。 不终止进程。

调用 exit_Exit_exit 函数时,不会调用在调用时存在的任何临时或自动对象的析构函数。 自动对象是在函数中定义的非静态本地对象。 临时对象是由编译器创建的对象,例如函数调用返回的值。 若要在调用 exit_Exit_exit 之前销毁自动对象,请显式调用该对象的析构函数,如下所示:

void last_fn() {}
    struct SomeClass {} myInstance{};
    // ...
    myInstance.~SomeClass(); // explicit destructor call
    exit(0);
}

不要使用 DLL_PROCESS_ATTACHDllMain 调用 exit。 若要退出 DLLMain 函数,请从 DLL_PROCESS_ATTACH 返回 FALSE

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

函数 必需的标头
exit, _Exit, _exit <process.h><stdlib.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_exit.c
// This program returns an exit code of 1. The
// error code could be tested in a batch file.

#include <stdlib.h>

int main( void )
{
   exit( 1 );
}

另请参阅

进程和环境控制
abort
atexit
_cexit_c_exit
_exec_wexec 函数
_onexit_onexit_m
quick_exit
_spawn_wspawn 函数
system_wsystem