exit和atexit

通用工具函数库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 0

void 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注册的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值