请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 160|回复: 5

[C语言] 在程序退出main()函数之后,还有可能执行一部分代码吗?

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22685
发表于 2015-12-28 12:41:05 | 显示全部楼层 |阅读模式
可以,但这要借助C库函数atexit()。利用atexit()函数可以在程序终止前完成一些“清理”工作——如果将指向一组函数的指针传递给atexit()函数,那么在程序退出main()函数后(此时程序还未终止)就能自动调用这组函数。下例的程序中就使用了atexit()函数:

# include <stdio.h>
# include <atdlib. h>
void close_files(void);
void print_regiatration_message(void);
int main(int, char ** );
int main (int argc, char** argv)
{
     atcxitCprint_regiatration_message);
     atexit(cloae_files) ;
    while (rec_count <max_recorda)
       {
         process_one_record ( );
     }
     exit (0);
}

在上例中,通过atexit()函数指示程序在退出main()函数后自动调用函数close_files()和print_registration_message(),分别完成关闭文件和打印登记消息这两项工作。

在使用atexit()函数时你要注意这样两点:第一,由atexit()函数指定的要在程序终止前执行的函数要用关键字void说明,并且不能带参数;第二,由atexit()函数指定的函数在入栈时的顺序和调用atexit()函数的顺序相同,即它们在执行时遵循后进先出(LIFO)的原则。例如,在上例中,由atexit()函数指定的函数在入栈时的顺序如下所示:
    atexit(print_registration_message);   
    atexit(close_files);
根据LIFO原则,程序在退出main()函数后将先调用close_files()函数,然后调用print_registration_message()函数。   

利用atexit()函数,你可以很方便地在退出main()函数后调用一些特定的函数,以完成一些善后工作(例如关闭程序中用到的数据文件)。
回复

使用道具 举报

0

主题

863

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2016-1-25 18:13:10 | 显示全部楼层
顶楼主,帮你顶个贴,我挣个积分
回复 支持 反对

使用道具 举报

0

主题

879

帖子

10

积分

注册会员

Rank: 2

积分
10
发表于 2016-2-2 11:32:02 | 显示全部楼层
好啊楼主,没想到啊,太好了
回复 支持 反对

使用道具 举报

4

主题

1004

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2018-3-10 10:35:35 | 显示全部楼层
希望楼主能够收集更多的资料,谢谢了!
回复 支持 反对

使用道具 举报

0

主题

957

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2018-10-15 22:35:37 | 显示全部楼层
很不错的帖子,又学到了,力挺
回复 支持 反对

使用道具 举报

0

主题

842

帖子

6

积分

注册会员

Rank: 2

积分
6
发表于 7 天前 | 显示全部楼层
不错的平台,以后需要经常光顾!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-18 18:40 , Processed in 0.218823 second(s), 29 queries .

快速回复 返回顶部 返回列表