簡體   English   中英

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

執行將按以下順序進行:

  1. initialisation
  2. condition ; 如果為假則結束
  3. statement
  4. increment/decrement
  5. 前往步驟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 */
}

所以無論如何你都會因為if(foo == 4);break if(foo == 4); 所以i++無法訪問

問題(即意外的;)已經在兩個答案中進行了描述。

我只想補充一點,您應該看一下編譯器選項設置。 許多編譯器可以檢測到這種“看起來很奇怪”的代碼,並向您發出警告。 例如:

警告:“'if'語句中為空體”

此外,可以將編譯器配置為將所有警告視為錯誤。

換句話說,編譯器選項通常可以幫助您查找“意外代碼”,從而避免浪費時間。

順便說一句-Eclipse編輯器在鍵入這樣的if語句后甚至可以發出“可疑分號”警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM