C++面试题之 main函数执行完之后还会调用其他的函数吗?

来源:互联网 发布:木托盘设计软件 编辑:程序博客网 时间:2024/05/18 02:12

 感谢原作者,原文地址:click me

  初次从面试宝典中看到这个问题,我那也是一脸的懵逼啊。老师一直告诉我们,main是函数的入口地址,执行完成后,就返回操作系统了。殊不知还有这么多没了解过的知识。

题目:

main()函数执行完后,还会调用执行其他的语句吗?

       我们通常认为C语言的起始函数是main()函数,实质上一个程序的启动函数并不一定是main()函数,这个可以采用链接器来设置,但是gcc中默认main()就是C语言的入口函数,在main函数启动之前,内核会调用一个特殊的启动例程,这个启动例程从内核中取得命令行参数值和环境变量值,为调用main()函数做好准备。

      因此对应程序而言main()函数并不是起始,但是对应C 语言而言,main()函数就是入口地址。

      按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit()函数来登记这些函数。 (函数的调用顺序与注册的顺序是相反的,通过下面的实例可以看出来)     

举例

代码如下:

[cpp] view plain copy
 print?
  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. void fun1(void)  
  4. {  
  5.     printf("fun1\n");  
  6. }  
  7.   
  8. void fun2(void)  
  9. {  
  10.     printf("fun2\n");     
  11. }  
  12.   
  13. void fun3(void)  
  14. {  
  15.     printf("fun3\n");  
  16. }  
  17. int main()  
  18. {  
  19.     atexit(fun1);  
  20.     atexit(fun2);  
  21.     atexit(fun3);  
  22.       
  23.     printf("main exit\n");  
  24.       
  25.     return 0;  
  26. }   

运行结果:



函数说明:

头文件:#include <stdlib.h>

定义函数:int atexit (void (*function) (void));

atexit()用来设置一个程序正常结束前调用的函数. 当程序通过调用exit()或从main()中返回时, 参数function 所指定的函数会先被调用, 然后才真正由exit()结束程序。

阅读全文
0 0