当我编写这段代码并编译时/W4
long r;
__try { r = 0; }
__finally { }
return r;
我得到:
warning C4701: potentially uninitialized local variable 'r' used
为什么会这样?
当我编写这段代码并编译时/W4
long r;
__try { r = 0; }
__finally { }
return r;
我得到:
warning C4701: potentially uninitialized local variable 'r' used
为什么会这样?
编译器无法确定 try 块内的代码是否会成功运行。在这种情况下,它总是会执行,但如果 try 块中有额外的代码 r = 0 可能永远不会执行。在这种情况下, r 未初始化,因此出现错误。
这和你说的没什么不同:
long r;
if(something) {
r = 0;
}
return r;
(其中“某物”几乎是一个恒定的真实值之外的任何东西)。
因为long r;
创建r
但未初始化;它是空的。
因此它会警告您该变量未初始化。在某些情况下,它会导致空指针。
将其添加为答案,因为它比仅在评论中更有趣:直到在变量之前插入了标签语句:错误才出现。去掉goto
& 关联的标签,没有任何警告。这可能与命名空间路径的设置方式有关,在插入块之前在行号上生成了类似的警告C4702。如果有人感兴趣,MVCE 仍有待生成。goto