atexit函数介绍

根据我们的理解,一个程序的执行都是从MAIN函数开始执行,从MAIN函数结束,这不可否认没有问题,然后依次往下一条一条语句执行,但是事实真的是这样么,接下来看看这个程序,是不是像我们想象的那样呢?在linux下我编写了这样一个程序,先不要看答案,看看能不能做对(很简单的)

根据我们刚才的思路,这个程序应该是先调用fun1,fun2,...依次往下执行,最后的结果就是

i am NO.1!
i am NO.2!
i am NO.3
i am last
process


但是结果真的是这样么?怀着一颗想弄明白的心执行了这个程序,最后的结果让我有点失望,因为不是我所期望的结果,结果是这个样子的


这和我预想的结果恰恰相反了,所以通过查阅资料稍微明白了这个atexit函数,接下来我们介绍一下他



atexit函数介绍

这是我在百度上搜到的解释


atexit()函数
atexit

  函数名: atexit

  头文件:#include<stdlib.h>

  功 能: 注册终止函数(即main执行结束后调用的函数)

  用 法: int atexit(void (*func)(void));

  注意:按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用。atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。

现在不难解释上面程序出现的结果了吧,一句话来说就是这个函数会在MAIN函数结束后调用,而且调用顺序相反,这里也就解释了为什么我们程序里的最后一名跑去当了第一名的原因,因为在atexit的帮助下,他成为了一匹黑马,拿下了第一名(拥有了超能力)。现在应该对atexit函数有个了解了吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章