当我编写此代码并使用/W4
long r;
__try { r = 0; }
__finally { }
return r;
我明白了:
warning C4701: potentially uninitialized local variable 'r' used
为什么会这样?
答案 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仍然会生成。