多玩YY语音的面试题:C++中如何在main()函数之前执行操作?

第一反应main()函数是所有函数执行的开始。但是问题是main()函数执行之前如何执行呢?

联想到MFC里面的 C**App类的theApp对象,其执行顺序就在main函数之前。道理相通,顺理推下,能够想到:如果在main函数之前声明一个类的全局的对象。那么其执行顺序,根据全局对象的生存期和作用域,肯定先于main函数。

示例如下:

classsimpleClass

{

public:

simpleClass( )

{

cout <

}

};

simpleClass g_objectSimple;         //step1全局对象

int_tmain(intargc, _TCHAR* argv[])//step3

{

return0;

}

可单步调试查看执行顺序为step1、step2、step3。

考虑到全局对象,同理会进一步思考静态对象的作用域。将上述示例进一步扩展如下:

classsimpleClass

{

public:

simpleClass( )

{

cout <

}

};

classsimpleClassTwo

{

public:

staticsimpleClass m_sSimpleClass;

};

simpleClass simpleClassTwo::m_sSimpleClass = simpleClass(); //step1 静态对象

int_tmain(intargc, _TCHAR* argv[])//step3

{

return0;

}

可单步调试查看执行顺序为step1、step2、step3。

至此,我们可以总结出:定义在main( )函数之前的全局对象、静态对象的构造函数在main( )函数之前执行。

再进一步思考,既然可以在main( )函数之前执行全局、静态对象的构造函数。那么有没有函数在main( )函数之后执行呢?

有的,onexit函数。原型如下:

_onexit_t _onexit(

_onexit_t function

);

_onexit_t_m _onexit_m(

_onexit_t_m function

);

解释:The _onexit function is passed the address of a function (function) to be called when the program terminates normally. Successive calls to _onexit create a register of functions that are executed in LIFO (last-in-first-out)

order. The functions passed to _onexit cannot take parameters.

核心点:

1)              执行期——程序执行终止的时候;

2)              传递参数——函数的地址,即函数指针;

3)              执行顺序——后进先出。

_onexit is a Microsoft extension. For ANSI portability, use atexit. The _onexit_m version of the function is for mixed mode use.

onexit是微软的扩展版本,标准C++里面应用的是atexit。

【MSDN】示例:

#include

#include

/* Prototypes */

intfn1(void), fn2(void), fn3(void), fn4 (void);

intmain(void)

{

_onexit( fn1 );

_onexit( fn2 );

_onexit( fn3 );

_onexit( fn4 );

printf( "This is executed first.\n");

}

intfn1()

{

printf( "next.\n");

return0;

}

intfn2()

{

printf( "executed ");

return0;

}

intfn3()

{

printf( "is ");

return0;

}

intfn4()

{

printf( "This ");

return0;

}

执行结果如下:

显然,读程序可以看出main( )函数执行完毕后又执行了onexit( )函数。

还有没有其他特殊的情况呢?持续探讨、更新中……

atexit函数的执行顺序_多玩YY语音的面试题:C++中如何在main()函数之前执行操作?...相关推荐

  1. 多玩YY语音的面试题 C++中如何在main 函数之前执行操作

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  2. 语言中如何在main函数开始前执行函数

    在gcc中,可以使用attribute关键字,声明constructor和destructor,代码如下: #include <stdio.h> __attribute((construc ...

  3. C++main函数的参数介绍以及如何在main函数前执行一段代码

    C++中参数介绍:https://www.cnblogs.com/jisongxie/p/7892366.html C++中主函数的执行过程以及如何在main函数前执行一段代码:https://www ...

  4. c语言中总是从main函数开始,C语言总是从main函数开始执行吗

    //-------------------------------------------------------- 本文目录结构 |-提出问题 |-解决问题 |-推荐文章 |-作业 //------ ...

  5. 编写一个C程序,实现以下功能:编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101。在main函数中输入整数n,调用函数,输出它的二进制

    题目要求: 编写一个C程序,实现以下功能: //编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101. //在main函数中输入整数n,调用函数 ...

  6. mysql中的运算符的执行顺序_【MySQL】执行顺序

    我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...

  7. 宏任务和微任务执行顺序_确保任务的执行顺序

    宏任务和微任务执行顺序 有时有必要对线程池中的任务施加一定的顺序. JavaSpecialists通讯的第206期提出了一种这样的情况:我们使用NIO从多个连接中读取数据. 我们需要确保来自给定连接的 ...

  8. vue父子组件生命周期执行顺序_关于Vue组件的生命周期及执行顺序

    本文主要讲述了:Vue组件渲染时的生命周期及执行顺序 Vue组件数据变更时的生命周期及执行顺序 Vue组件嵌套时的生命周期及执行顺序 正文 组件渲染时的生命周期 在组件渲染时,每个Vue组件都有4个生 ...

  9. jmeter 线程执行顺序_软件接口测试工具Jmeter使用方法详解(一)

    介绍完了接口测试是什么及其内在逻辑和Jmeter的安装,从这篇文章开始我们正式开始介绍Jmeter的使用方法.如果对接口测试逻辑流程和Jmeter安装有疑问的朋友,可以看这两篇文章: 星空下:软件接口 ...

最新文章

  1. Western Digital使用5400 rpm级硬盘使所有人感到困惑
  2. c# 联合halcon 基于相关性 模板匹配_宣城seo公司_有效利用及时相关性解决关键词排名上不到首页的难题...
  3. this关键字+super关键字
  4. js中的正则表达式(2)
  5. 在Ubuntu中部署并测试Fabric 1.0 Beta
  6. redis配置文件redis.conf详细说明
  7. Ora-12505 故障
  8. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  9. 【拆解】便携示波器怎么选?
  10. 《华为工作法》5 态度有时候比能力更加重要
  11. 网络应用的基本原理(基础 !非常重要!)
  12. U盘文件、文件夹不显示却能搜索到 显示U盘文件的解决办法
  13. (一)Activiti 数据库25张表——一般数据1 (ACT_GE_BYTEARRAY)
  14. 【人情世故】汇报措辞
  15. 微信企业号开发:corpsecret到底在哪块呢?
  16. 访问不到webapp
  17. 区块链跨链技术之BTC Relay
  18. android 中存储文件所在位置
  19. 联诚发召开宝安区卓越绩效管理标准实施项目启动大会
  20. 大数据搜索引擎技术_网络数据搜索技术

热门文章

  1. linux压缩文件命令_linux常见的命令行和快捷键(带英文全称,便于记忆)
  2. css简单实现鼠标悬浮时图片向上浮动的效果
  3. 第七讲 CST微波工作室边界条件和背景材料
  4. 电脑通过手机上网的设置
  5. div填充透明背景但是内容不透明
  6. python日历小程序_python写的日历小程序
  7. php 鲜奶配送系统,真正免费的鲜奶配送软件,牛奶配送,酸奶配送系统
  8. uni-app教程入门视频资料
  9. bs文件服务器,BS架构(示例代码)
  10. 响应式设计 视口 viewport 媒体查询