| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6387 人关注过本帖, 1 人收藏
标题:全局变量和STATIC变量的初始化是在编译时进行的么
只看楼主 加入收藏
njzhangyuhao
Rank: 2
等 级:论坛游民
帖 子:197
专家分:35
注 册:2010-11-20
结帖率:100%
收藏(1)
 问题点数:0 回复次数:5 
全局变量和STATIC变量的初始化是在编译时进行的么
是么
2011-05-12 17:37
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:0 
全局变量和STATIC变量的初始化是在 main函数之前进行的,不是在编译时进行。
程序实际的开始点是在 C 库的函数里,并不是 main 函数,C 库的函数 进行全局变量和静态变量的初始化,以及其他初始化操作然后跳转到  main 函数开始, main 函数结束的时候又会回到C库的函数里,进行必要的清理工作。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-12 18:12
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
正如楼主所说,在编译时进行的。

[ 本帖最后由 Kid_X 于 2011-5-12 23:38 编辑 ]
2011-05-12 23:35
njzhangyuhao
Rank: 2
等 级:论坛游民
帖 子:197
专家分:35
注 册:2010-11-20
收藏
得分:0 
球标准答案啊
2011-05-13 10:10
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
全局变量和静态变量分两种,一种是带初始化的,一种是未初始化的。
可执行程序可以分为几个段,如代码段,主要放指令,数据段,存放已初始化的全局变量和静态变量,即那些初始化的值存放在该段中,该步骤是在链接是就做好了的。还有BSS段,存放未初始化的全局变量和静态变量,这个段在文件中不占空间,当程序加载进内存后,系统给这个段分配空间,并初始化为0,所以未初始化的全局变量和静态变量的值都是0。

二楼所说的C库函数的初始化工作不是初始化全局变量,而是初始化环境变量、还有就是main函数的入口参数。
我们写一个命令行下的c程序是可以传入参数的,如main为
int main(int argc, char **argv)
C库函数的初始化就是把我们传入的参数组织好,这样我们就可以通过argc和argv来访问我们传给main函数的参数了。
当然,C库函数的初始化操作还做一些其他的操作。
2011-05-13 11:19
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
1.程序
图片附件: 游客没有浏览图片的权限,请 登录注册

2.crt之前的情况
图片附件: 游客没有浏览图片的权限,请 登录注册

3.exe文件的情况
图片附件: 游客没有浏览图片的权限,请 登录注册

4.是编译期完成的初始化,而不是运行期

技术问题,请不要以短消息方式提问
2011-05-13 12:30
快速回复:全局变量和STATIC变量的初始化是在编译时进行的么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019771 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved