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

単なるコメントよりも興味深いので、これを回答として追加します。変数の前にlabeled-statement : が挿入されるまで、エラーは発生しませんでした。関連するラベルを削除するgotoと、警告は表示されません。これは、ブロックの挿入に行番号で生成された同様の警告C4702でネームスペース パスがどのように設定されているかに関係している可能性があります。誰かが興味を持っている場合は、MVCE がまだ生成されていません。goto

于 2016-02-18T20:46:03.277 に答える
0

long r;作成しますrが、初期化されていないためです。それはヌルです。

そのため、変数が初期化されていないことが警告されます。場合によっては、Null ポインターが発生します。

于 2012-04-23T16:52:25.190 に答える