关于main()的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 09:31:47
不是说main()是程序的入口,那么书本又说全局对象的构造函数在main()开始之前被调用,这我个人理解不了。
想问问大家怎样解释清楚点才能让我理解。----谢谢!!!!
我是说main()既然是程序的入口,那么其他的东西就要在其之后才能形成

入口,指执行的入口,系统去执行你写的程序第一个去调用的函数。而如果你定义了全局变量,全局变量可是要在整个程序间都可以访问到的,当然要在main()之前就分配完。C的时候,只是对全局变量做些分配工作。但C++有对象了,如果一个全局变量是类对象,就要调用构造函数,当然事实上这个函数就会先于main()执行。事实上启动一个程序,还要调用CRT(C RunTime),做一些初始化的工作,是在你的main()之前就进行了的,但那是系统做的工作,与你自己写明要干什么是两回事。除此几点之外,你确实可以保证你自己的main先于别的函数执行,别的函数的调用是你从main()中发起的。

不论是开始还是结束都在调用.

按我的理解应该是构造函数不该说调用。。应该是加载,然后在main()中调用

和全局对象一样,所有全局对象在主函数(main)启动之前,全部已被构造.
因为构造过程是程序语句的执行过程,所以,可以想象在程序启动之前,已经有程序语句(构造函数)在那里被执行过了.全局对象的创建并补依赖于main函数之后的运行顺序,它早在main运行之前就创建完毕了,变量其实也就是我们现在说的对象,它需要在每个函数中可见,包括main函数.而全局变量由编译器建立,并且初始化为0,全局对象同样需要初始化,这份工作就交给了构造函数,所以在main执行之前构造函数已经执行.
其实同楼上这位兄弟说的一样,跳出main函数,还可以执行其他的代码.编译器给我们添加了大量的代码(来源于C运行时库).例如编写控制台程序,实际入口maincrtsantnp.