[英]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
如果編譯器警告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 */
}
所以無論如何你都會因為if(foo == 4);
而break
if(foo == 4);
所以i++
無法訪問
問題(即意外的;)已經在兩個答案中進行了描述。
我只想補充一點,您應該看一下編譯器選項設置。 許多編譯器可以檢測到這種“看起來很奇怪”的代碼,並向您發出警告。 例如:
警告:“'if'語句中為空體”
此外,可以將編譯器配置為將所有警告視為錯誤。
換句話說,編譯器選項通常可以幫助您查找“意外代碼”,從而避免浪費時間。
順便說一句-Eclipse編輯器在鍵入這樣的if語句后甚至可以發出“可疑分號”警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.