exit和atexit

来源:互联网 发布:ubuntu更改软件源失败 编辑:程序博客网 时间:2024/06/07 01:28

通用工具函数库stdlib.h提供了除从main函数中正常返回之外的其他一些终止程序运行的方法,如exit和atexit。exit强制终止程序的运行,就像正常结束一样,当检测到一个输入错误或者欲处理的文件无法打开时,常常使用exit来结束程序。atexit注册一个函数,这个函数必须在程序成功结束时调用–要么程序执行到了main函数末尾,要么调用了exit函数,使程序结束。
atexit接收指向欲注册函数的指针(即函数名)作为实参。这个在程序结束时被调用的函数不能有实参,也不能返回任何一个值,最多能注册32个在程序结束时被调用的函数。
exit函数接收一个实参。这个实参通常是符号常量EXIT_SUCCESS或EXIT_FAILURE。如果使用EXIT_SUCCESS来调用exit函数,一个系统定义的,代表程序成功结束的数值将返回给主调环境。如果使用EXIT_FAILURE来调用exit函数,将返回一个系统定义的,代表程序未成功的数值。调用exit后,由 atexit注册的所有函数,将按照与它们注册相反的顺序,依次被调用。所有与程序相联系的输入、输出流将被处理完,然后关闭,控制也返回到主调环境中。
示例如下:

#include <stdio.h>#include <stdlib.h>#define DEBUG 0void print1();void print2();void print3();int main(int argc, char const *argv[]){    atexit(print1);    atexit(print2);    atexit(print3);    if (DEBUG == 1)        exit(EXIT_SUCCESS);    else        exit(EXIT_FAILURE);    return 0;}void print1() {    printf("This is print1.\n");}void print2() {    printf("This is print2.\n");}void print3() {    printf("This is print3.\n");}

注意,不论exit参数是什么,函数均调用atexit注册的函数。

0 0
原创粉丝点击