打印

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

[复制链接]
2829|10
手机看帖
扫描二维码
随时随地手机跟帖
沙发
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

使用特权

评论回复
5
sdpz| | 2011-3-16 19:38 | 只看该作者
我所知道的有
1. gcc会。
2. C51不会,C51只有静态局部变量会自动初始化为0。

使用特权

评论回复
6
原野之狼| | 2011-3-16 23:51 | 只看该作者
看看启动文件里干了什么事 一般会进行清零处理
正如ayb_ice兄台所言 对于需要使用初始值的情形 程序员最好自己显示地赋值

使用特权

评论回复
7
大道至简| | 2011-3-18 11:37 | 只看该作者
C语言编译器是变量没有默认值的
C++也是

变量在第一次赋值之前可能是任意值

使用特权

评论回复
8
new1988| | 2011-3-18 12:44 | 只看该作者
keil C51里面的STARTUP.A51就是把所以的RAM出事化为0。

使用特权

评论回复
9
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.
翻译:
如果一个具有自动存储持续时间(生命期)的对象不显式初始化,它的(初始)值是不确定的。如果一个具有静态存储持续时间(生命期)的对象不显式初始化,那么:
- 如果它有指针类型,它是初始化为空指针;
- 如果它有算术类型,它被初始化为(正或无符号)零;
- 如果它是一个聚合(结构),每一个成员根据本规则被(递归地)初始化;
- 如果它是一个联合,第一个命名的成员根据本规则被(递归地)初始化。

使用特权

评论回复
10
sdpz| | 2011-3-18 13:50 | 只看该作者
什么叫肯定会,楼上,你自己都没认真看摘录。

使用特权

评论回复
11
john_lee| | 2011-3-18 14:08 | 只看该作者
什么叫肯定会,楼上,你自己都没认真看摘录。
sdpz 发表于 2011-3-18 13:50

哦,那我倒要听听你的高见。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

14

帖子

0

粉丝