2

当我编写这段代码并编译时/W4

long r;
__try { r = 0; }
__finally { }
return r;

我得到:

warning C4701: potentially uninitialized local variable 'r' used

为什么会这样?

4

3 回答 3

3

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

这和你说的没什么不同:

long r;
if(something) {
  r = 0;
}
return r;

(其中“某物”几乎是一个恒定的真实值之外的任何东西)。

于 2012-04-23T17:52:19.457 回答
0

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

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

于 2012-04-23T16:52:25.190 回答
0

将其添加为答案,因为它比仅在评论中更有趣:直到在变量之前插入了标签语句:错误才出现。去掉goto& 关联的标签,没有任何警告。这可能与命名空间路径的设置方式有关,在插入块之前在行号上生成了类似的警告C4702。如果有人感兴趣,MVCE 仍有待生成。goto

于 2016-02-18T20:46:03.277 回答