艺客网站首页,做网站 php j2ee,注册一家小规模公司多少钱,百度竞价收费标准C语言main()主函数执行完毕后是否会再执行一段代码 分享到#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网main() 主函数执行完毕后#xff0c;是否可能会再执行一段代码#xff1f;给出说明。main主函数是所有程序必须具备的函数#xff0c;是C/C人员一接触代码就知道的函数…C语言main()主函数执行完毕后是否会再执行一段代码 分享到QQ空间新浪微博腾讯微博豆瓣人人网 main() 主函数执行完毕后是否可能会再执行一段代码给出说明。 main主函数是所有程序必须具备的函数是C/C人员一接触代码就知道的函数那么这个问题会难倒很多人尤其是平常不注意思考不懂得问为什么的程序员 这个问题的答案是main() 函数结束后可以执行一些代码进行清理工作。 具体请看下面的解析。 先来看一段代码 复制纯文本复制 #include stdlib.h#include stdlib.h#include stdio.h void fnl(void), fn2(void), fn3(void), fn4(void); int main( void ){ // atexit()函数原型为int atexit(void (*function)(void)); atexit(fnl); atexit(fn2); atexit(fn3); atexit(fn4); printf(This is executed first.\n); return 0;} void fnl(){ //main退出后执行的函数 printf(next.\n);} void fn2(){ printf(executed );} void fn3(){ printf(is );} void fn4(){ printf(This );} #include stdlib.h
#include stdlib.h
#include stdio.hvoid fnl(void), fn2(void), fn3(void), fn4(void);int main( void ){// atexit()函数原型为int atexit(void (*function)(void));atexit(fnl);atexit(fn2);atexit(fn3);atexit(fn4);printf(This is executed first.\n);return 0;
}void fnl(){ //main退出后执行的函数printf(next.\n);
}void fn2(){printf(executed );
}void fn3(){printf(is );
}void fn4(){printf(This );
} 运行结果 This is executed first.
This is executed next. 看到没fn1()、fn2()、fn3()、fn4()就是在main()函数运行结束后调用的。 这里最关键的是使用了 atexit() 函数讲 atexit() 函数之前先讲一下 exit() 函数。 exit()函数用于在程序运行的过程中随时结束程序其原型为 void exit(int state); exit的参数state是返回给操作系统或当前程序的调用程序返回0表示程序正常结束非0表示程序非正常结束。main函数结束时也会隐式地调用exit()函数。exit()函数运行时首先会执行由atexit()函数登记的函数然后会做一些自身的清理工作同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。 atexit() 用于注册终止函数(即main执行结束后调用的函数)其原型为 int atexit(void (*function)(void)); 很多时候我们需要在程序退出的时候做一些诸如释放资源的操作但程序退出的方式有很多种比如main()函数运行结束、在程序的某个地方用exit()结束程序、用户通过CtrlC或Ctrlbreak操作来终止程序等等因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针函数指针指向一个没有参数也没有返回值的函数。 在一个程序中最多可以用atexit()注册32个处理函数这些处理函数的调用顺序与其注册的顺序相反也即最先注册的最后调用最后注册的最先调用。同一个函数如若登记多次则也会被调用多次。 正如上面程序中所示这些函数都是在main结束以后才被调用的。atexit()只是注册他们使得他们在main结束以后被调用看名字就可以看出来。