循环增量中无法访问的代码?

时间:2015-01-15 08:30:33

标签: c++ c visual-studio unreachable-code

我在for循环中收到C4702:无法访问的代码警告;奇怪的是 - 通过分解parens内部的组件 - 警告指向增量部分。这是一个演示此错误的示例程序:

int main()
{
    int foo = 3;
    for (int i = 0;
        i < 999;
        i++)    // warning on this line
    {
        if (foo == 4);
        {
            break;
        }
    }
    return 0;
}

我无法弄清楚这一行有什么问题,因为for循环看起来非常简单。

3 个答案:

答案 0 :(得分:9)

你的if语句中有一个迷路分号:

if (foo == 4);

回想一下,for循环具有以下结构:

for (initialisation; condition; increment/decrement)
    statement

执行将按以下顺序进行:

  1. initialisation
  2. condition;如果是假则结束
  3. statement
  4. increment/decrement
  5. 转到第2步
  6. 如果编译器警告increment/decrement无法访问,则意味着它之前的某些内容导致执行总是跳过它 - 在这种情况下,散列分号会导致break始终执行,过早地跳出循环。

答案 1 :(得分:2)

for (int i = 0;
    i < 999;
    i++)    // warning on this line
{
    if (foo == 4);
    {
        break;
    }
}

这与

相同
for (int i = 0;
    i < 999;
    )    
{
    if (foo == 4);
    {
        break;
    }
    i++;  /* Note the increment here */
}

所以无论如何,由于break您将if(foo == 4);,因此无法访问i++

答案 2 :(得分:0)

问题(即无意的;)已在两个答案中描述。

我想补充一点,你应该看看你的编译器选项设置。许多编译器可以检测到这种“看起来很奇怪”的代码并给你一个警告。例如:

警告:“'if'语句中的空体”

此外,编译器可以配置为将所有警告视为错误。

换句话说 - 编译器选项通常可以帮助您找到“意外代码”,以避免浪费时间。

BTW - 只要你输入这样一个if语句,eclipse编辑器甚至可以发出“可疑的分号”警告。