我是C编程的新手.我知道这是一个非常简单的问题,但我需要一些建议.我正在锻炼控制结构if statement
.我遇到了一个例子
这是代码: -
#includeint main() { int a = 200, b, c ; if (a >= 300) { b = 100 ; c = 200 ; } printf ( "b=%d\nc=%d", b, c ) ; return 0; }
而这个的输出是: -
b=32767 c=0
在这里,我期待输出为两个值为零.通过查看此输出我很惊讶为什么变量中的垃圾值b
.
这背后的原因是什么?或者我以错误的方式声明变量.这背后的整个情景应该是什么?
如果
if (a >= 300)
失败,b
并且c
不会分配任何值.
现在,b
和c
是自动的局部变量,除非明确初始化,它们包含不定值.
参考C11
,章节§6.7.9,初始化
如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的.[...]
使用单元化局部变量来访问它们的值会调用未定义的行为.
对于未定义的行为,参考相同标准的附录§J.2
具有自动存储持续时间的对象的值在不确定时使用.
因此,始终建议初始化本地变量,例如
int a = 200, b = 0, c = 0;
也就是说,FWIW int main()
应该int main(void)
至少符合标准.