4

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

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

我不知道这条线有什么问题,因为 for 循环看起来非常简单。

4

3 回答 3

12

您的 if 语句中有一个杂散的分号:

if (foo == 4);

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

for (initialisation; condition; increment/decrement)
    statement

执行将按以下顺序进行:

  1. initialisation
  2. condition; 如果为假则结束
  3. statement
  4. increment/decrement
  5. 转到第 2 步

如果编译器警告increment/decrement不可访问,这意味着在它导致执行之前总是跳过它 - 在这种情况下,杂散的分号导致break总是执行,过早地跳出循环。

于 2015-01-15T08:30:32.860 回答
4
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++无法到达

于 2015-01-15T08:35:25.190 回答
1

问题(即意外的;)已经在两个答案中进行了描述。

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

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

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

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

顺便说一句,当您键入这样的 if 语句时,eclipse 编辑器甚至可以发出“可疑分号”警告。

于 2015-01-15T09:12:45.140 回答