C++中如何在main()函数之前执行操作?
来源:互联网 发布:写作软件哪个好 编辑:程序博客网 时间:2024/05/19 02:26
多玩YY语音的面试题:C++中如何在main()函数之前执行操作?
第一反应main()函数是所有函数执行的开始。但是问题是main()函数执行之前如何执行呢?
联想到MFC里面的 C**App类的theApp对象,其执行顺序就在main函数之前。道理相通,顺理推下,能够想到:如果在main函数之前声明一个类的全局的对象。那么其执行顺序,根据全局对象的生存期和作用域,肯定先于main函数。
示例如下:
class simpleClass { public: simpleClass( ) { cout << "simpleClass constructor.." << endl; //step2 } }; simpleClass g_objectSimple; //step1全局对象 int _tmain(int argc, _TCHAR* argv[]) //step3 { return 0; } 可单步调试查看执行顺序为step1、step2、step3。
考虑到全局对象,同理会进一步思考静态对象的作用域。将上述示例进一步扩展如下:
class simpleClass { public: simpleClass( ) { cout << "simpleClass constructor.." << endl; //step2 } }; class simpleClassTwo { public: static simpleClass m_sSimpleClass; }; simpleClass simpleClassTwo::m_sSimpleClass = simpleClass(); //step1 静态对象 int _tmain(int argc, _TCHAR* argv[]) //step3 { return 0; } 可单步调试查看执行顺序为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 <stdlib.h> #include <stdio.h> /* Prototypes */ int fn1(void), fn2(void), fn3(void), fn4 (void); int main( void ) { _onexit( fn1 ); _onexit( fn2 ); _onexit( fn3 ); _onexit( fn4 ); printf( "This is executed first.\n" ); } int fn1() { printf( "next.\n" ); return 0; } int fn2() { printf( "executed " ); return 0; } int fn3() { printf( "is " ); return 0; } int fn4() { printf( "This " ); return 0; }
执行结果如下:
显然,读程序可以看出main( )函数执行完毕后又执行了onexit( )函数。
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- C++中如何在main()函数之前执行操作?
- 多玩YY语音的面试题:C++中如何在main()函数之前执行操作?
- 面试题:C++中如何在main()函数之前执行操作?
- c语言中在main函数之前会执行什么
- 面试中那点超乎你想象的题目:C++中如何在main()函数之前执行操作?
- 在main函数之前和之后执行一些操作
- linux中在main函数之前执行其他函数实现
- 如何让一段程序在main函数之前执行
- 如何让一段程序在main函数之前执行的
- 如何使得代码在main函数之前/之后执行
- static变量在Main函数之前执行分析(C++)
- c++中static变量在main函数之前执行
- 在main函数之前执行一些函数
- main函数之前执行了哪些操作
- static变量在Main函数之前执行
- linux下用dd命令读写移动硬盘
- 第四届在线编程大赛·线上初赛:带通配符的数-我的解题方法
- 前端学习——JSON格式详解
- JSP 简介
- jabberNet 发送出席信息
- C++中如何在main()函数之前执行操作?
- [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系
- 黑马程序员——动态代理技术
- 基于sqlCE 3.0的数据库开发
- android状态机机制StateMachine
- 省市区 数组套字典 字典套数组
- 放逐心灵之旅
- bzoj1230[Usaco2008 Nov]lites 开关灯
- 两圆交点