C语言中的程序终止

3064 admin
国风企划

C语言中的程序终止

C语言中程序终止执行的情况有3种,具体如下:

- 程序终止最常见的情况是使用main函数,通过return语句将状态代码返回给执行环境;

- 通过调用exit函数、_Exit函数或者quick_exit函数正常终止程序执行;

- 此外,信号也能终止程序执行;调用abort函数能够导致程序异常终止。

本文主要讨论第二种和第三种情况。

正常终止程序执行,以exit函数为例,其函数原型如下所示:

_Noreturn void exit(int status);

当程序终止执行时,程序会通过参数status告诉执行环境程序终止执行的原因。参数status是状态代码,其值遵守一定的约定。ISO/IEC 9899:2024标准第7.24.5.4 The exit function节规定:如果status值为0或者EXIT_SUCCESS,则返回成功终止状态的实现定义形式;如果status值为EXIT_FAILURE,则返回不成功终止状态的实现定义形式;否则status值由实现定义。EXIT_SUCCESS和EXIT_FAILURE都是头文件中定义的宏。

如果正常终止程序执行,可以自行安排清理程序,一个常用的方法就是通过atexit函数或者at_quick_exit函数注册清理函数,以atexit函数为例:

#include

#include

void cleanUp(void)

{

/* 清理函数代码。*/

}

int main(void)

{

atexit(cleanUp); //通过atexit函数注册cleapUp函数。

exit(EXIT_SUCCESS);

}

调用exit函数时,会先调用cleanUp函数。

异常终止程序执行,以abort函数为例,其函数原型如下所示:

_Noreturn void abort(void);

操作系统使用信号来报告执行程序的异常情况,所以应定义信号处理函数;当特定的信号生成时,调用信号处理函数。abort函数会生成SIGABRT信号,导致程序异常终止。

#include

#include

#include

int main(void)

{

FILE *pFile;

signal(SIGABRT, SIG_DFL); //设置SIGABRT信号处理函数。

pFile = fopen("gch.txt", "r");

if(pFile==NULL)

{

perror("Error opening file");

abort();

}

fclose(pFile);

return 0;

}

这里将使用默认函数处理SIGABRT信号。

主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018

法国南特市地图 《征途》10月17日部分服务区合并公告