请问是否所有编译器初始化全局变量都是0

[复制链接]
4055|10
 楼主| anhemeiyin 发表于 2011-3-16 16:25 | 显示全部楼层 |阅读模式
ayb_ice 发表于 2011-3-16 17:01 | 显示全部楼层
本帖最后由 ayb_ice 于 2011-3-16 19:04 编辑

没有编译器一定会这样做的,程序员最好把它当成未来处理
老鱼探戈 发表于 2011-3-16 17:46 | 显示全部楼层
至少汇编的编译器不会这样做
aibxyz 发表于 2011-3-16 18:02 | 显示全部楼层
基本不会
你碰到是0是因为内存被分配那个地方上电或程序起来就是0
sdpz 发表于 2011-3-16 19:38 | 显示全部楼层
我所知道的有
1. gcc会。
2. C51不会,C51只有静态局部变量会自动初始化为0。
原野之狼 发表于 2011-3-16 23:51 | 显示全部楼层
看看启动文件里干了什么事 一般会进行清零处理
正如ayb_ice兄台所言 对于需要使用初始值的情形 程序员最好自己显示地赋值
大道至简 发表于 2011-3-18 11:37 | 显示全部楼层
C语言编译器是变量没有默认值的
C++也是

变量在第一次赋值之前可能是任意值
new1988 发表于 2011-3-18 12:44 | 显示全部楼层
keil C51里面的STARTUP.A51就是把所以的RAM出事化为0。
john_lee 发表于 2011-3-18 13:21 | 显示全部楼层
本帖最后由 john_lee 于 2011-3-18 13:22 编辑

肯定会的,这是C99标准规定的。C99原文摘录:
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.
翻译:
如果一个具有自动存储持续时间(生命期)的对象不显式初始化,它的(初始)值是不确定的。如果一个具有静态存储持续时间(生命期)的对象不显式初始化,那么:
- 如果它有指针类型,它是初始化为空指针;
- 如果它有算术类型,它被初始化为(正或无符号)零;
- 如果它是一个聚合(结构),每一个成员根据本规则被(递归地)初始化;
- 如果它是一个联合,第一个命名的成员根据本规则被(递归地)初始化。
sdpz 发表于 2011-3-18 13:50 | 显示全部楼层
什么叫肯定会,楼上,你自己都没认真看摘录。
john_lee 发表于 2011-3-18 14:08 | 显示全部楼层
什么叫肯定会,楼上,你自己都没认真看摘录。
sdpz 发表于 2011-3-18 13:50

哦,那我倒要听听你的高见。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部