我写了一些代码来计算单词中的位数。当我printf()
计数它按预期打印32但是当我在函数中粘贴相同的代码并打印返回值时,它给了我一些疯狂的大数字。
然后我将代码复制/粘贴回main()
打印了计数并同时打印了我的函数的返回值,并且他们都给了我32但是如果我然后注释掉{{1中的代码我的函数再次打印大数字。
任何人都知道为什么会这样?
main()
答案 0 :(得分:6)
在wordlength()
函数中,count
是一个自动局部范围变量,未显式初始化。所以,初始值是不确定的。
引用C11
标准,章节§6.7.9
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不定。 [...]
您很容易将后增量应用到它上面。它调用undefined behavior。
相关,附件§J.2,未定义行为的原因,
使用具有自动存储持续时间的对象的值 不确定的。
因此,您的程序会展示UB并且无法保证产生任何有效结果。
解决方案:将count
初始化为0。
FWIW,关于评论
//如果我取消注释下面的代码
//然后打印32就像我想要的那样
也是UB的结果。
答案 1 :(得分:4)
您必须将count
初始化为0或其他内容,否则它将具有未定义的值。