我在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循环看起来非常简单。
答案 0 :(得分:9)
你的if语句中有一个迷路分号:
if (foo == 4);
回想一下,for循环具有以下结构:
for (initialisation; condition; increment/decrement)
statement
执行将按以下顺序进行:
initialisation
condition
;如果是假则结束statement
increment/decrement
如果编译器警告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编辑器甚至可以发出“可疑的分号”警告。