for循环增量中无法访问的代码?
Unreachable code in for loop increment?
我收到 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 循环看起来很简单。
您的 if 语句中有一个分号:
if (foo == 4);
回想一下 for 循环具有以下结构:
for (initialisation; condition; increment/decrement)
statement
执行将按以下顺序进行:
initialisation
condition
;如果为假则结束
statement
increment/decrement
- 转到第 2 步
如果编译器警告 increment/decrement
无法访问,这意味着它之前的某些东西导致执行总是跳过它 - 在这种情况下,杂散的分号导致 break
总是执行,过早跳出循环。
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++
无法到达
问题(即意外的 ;)已在两个答案中描述。
我想补充一点,你应该看看你的编译器选项设置。许多编译器可以检测到这样的 "strange looking" 代码并给你一个警告。例如:
警告:"empty body in an 'if' statement"
此外,可以将编译器配置为将所有警告视为错误。
换句话说 - 编译器选项通常可以帮助您找到 "unintended code" 从而避免浪费时间。
顺便说一句 - Eclipse 编辑器甚至可以在您键入这样的 if 语句时立即发出 "suspicious semicolon" 警告。
我收到 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 循环看起来很简单。
您的 if 语句中有一个分号:
if (foo == 4);
回想一下 for 循环具有以下结构:
for (initialisation; condition; increment/decrement)
statement
执行将按以下顺序进行:
initialisation
condition
;如果为假则结束statement
increment/decrement
- 转到第 2 步
如果编译器警告 increment/decrement
无法访问,这意味着它之前的某些东西导致执行总是跳过它 - 在这种情况下,杂散的分号导致 break
总是执行,过早跳出循环。
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++
无法到达
问题(即意外的 ;)已在两个答案中描述。
我想补充一点,你应该看看你的编译器选项设置。许多编译器可以检测到这样的 "strange looking" 代码并给你一个警告。例如:
警告:"empty body in an 'if' statement"
此外,可以将编译器配置为将所有警告视为错误。
换句话说 - 编译器选项通常可以帮助您找到 "unintended code" 从而避免浪费时间。
顺便说一句 - Eclipse 编辑器甚至可以在您键入这样的 if 语句时立即发出 "suspicious semicolon" 警告。