我被 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??
}
}
在这段代码中,我有三个if
s 和一个未初始化的局部变量 i。CSC 足够聪明,可以容忍我在第一种和第二种情况下使用 i,因为它可以告诉代码在哪里使用 i 是不可访问的。然而在第三种情况下,它抱怨 i“使用未分配的局部变量 i”的增量。为什么它在前两个 if 中正确检测到 i 在无法访问的代码中,但在第三个中没有(这只不过是前两种情况的组合?