博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++面试题之 main函数执行完之后还会调用其他的函数吗?
阅读量:3738 次
发布时间:2019-05-22

本文共 875 字,大约阅读时间需要 2 分钟。

 感谢原作者,原文地址:

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

题目:

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

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

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

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

举例

代码如下:

[cpp]   
 
  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()结束程序。

你可能感兴趣的文章
通过jsDelivr + github 搭建一个简易图床
查看>>
目前国内最热门的四款远程桌面控制软件
查看>>
基础概念1
查看>>
Billboard HDU - 2795(树状数组,单点修改,区间查询)
查看>>
centos7搭建easy-mock服务
查看>>
数据结构系统学习(1)数据类型和数据结构的概念
查看>>
关于git pull机制和游戏开发热更新思考
查看>>
程序员如何跨过自我推销的难关?
查看>>
nginx基础
查看>>
我用C++复刻了这款上世纪最伟大的游戏
查看>>
网络协议笔记
查看>>
Django---启动admin的报no such table: auth_user错误
查看>>
不相交集类及其应用生成迷宫
查看>>
使用kali(外网)生成木马入侵安卓手机
查看>>
Windows10 环境下Jupyter Notebook的安装与使用
查看>>
二叉树的下一个结点
查看>>
Kubernetes(十七) 基于NFS的动态存储申请
查看>>
qt creator源码全方面分析(3-1)
查看>>
概率统计21——指数分布和无记忆性
查看>>
求1+2+3+...+n
查看>>