私は csc からこのコードへの反応に困惑しています:
{
int i;
if (false)
{
i++; // uninitialized, but allowed by compiler
}
if (false && i < 30) // uninitialized, but allowed by compiler
{
}
if (false && i < 30) // uninitialized, but allowed by compiler
{
i++; // NOT ALLOWED by compiler??
}
}
このコードには、3 つif
の s と 1 つの初期化されていないローカル変数 i があります。CSC は、i が使用されている場所に到達できないことをコードに伝えることができるため、最初と 2 番目のケースでの i の使用を許容するほどスマートです。しかし、3 番目のケースでは、i のインクリメントについて「割り当てられていないローカル変数 i の使用」について不平を言っています。最初の 2 つの if で i が到達不能コードにあることを正しく検出しているのに、3 番目の if では正しく検出していないのはなぜですか (これは最初の 2 つのケースの組み合わせにすぎないのですか?