使用潜在的未初始化的局部变量?为什么?

时间:2012-04-23 16:50:09

标签: visual-c++ warnings initialization

当我编写此代码并使用/W4

进行编译时
long r;
__try { r = 0; }
__finally { }
return r;

我明白了:

warning C4701: potentially uninitialized local variable 'r' used

为什么会这样?

3 个答案:

答案 0 :(得分:2)

编译器无法确定try块内的代码是否会成功运行。在这种情况下,它总是会,但如果try块中有额外的代码,则r = 0可能永远不会执行。在那种情况下,r是未初始化的,因此是错误。

与你说:

并没有什么不同
long r;
if(something) {
  r = 0;
}
return r;

(其中'某事'几乎不是常数真值)。

答案 1 :(得分:0)

因为long r;创建r但未初始化;它是空的。

因此它会警告您该变量未初始化。在某些情况下,它会导致空指针。

答案 2 :(得分:0)

添加此作为答案,因为它比仅仅评论更有意义: 在变量之前插入标记语句:之前,错误从未出现过。删除goto&相关标签并没有警告。 这可能与如何设置命名空间路径以及在插入goto块之前在行号上生成的类似警告C4702有关。如果有人感兴趣,MVCE仍然会生成。