2014-12-03 156 views
-2
#include<stdio.h> 

int main() 
{ 
    int i=5; 
    while(i--) 
    { 
     printf("%d\n",i); 
    }; 
    printf("Out of loop\n"); 
    return 0; 
} 

此代碼正常工作!循環結束處的;不代表什麼意思? 所以,即使我們添加它,我們沒有任何問題?只是好奇!我認爲在循環結束時添加;沒有任何意義。在while循環結尾添加`;`

+1

額外的';'是「空語句」的終止。在'}'之後加';;'會添加兩個空語句。 – wildplasser 2014-12-03 10:57:33

+0

請注意,在do {/ * code * /} while(/ * condition * /);'中,尾部的';'不是空語句,而是必需的。 – DevSolar 2014-12-03 11:06:20

回答

10

它「有效」,但它是一個空的語句,因此它改變了程序的結構。

考慮一下:

if (foo()) 
    while (bar()) 
    { 
    foo_some_more() 
    } 
else 
{ 
    do_something_about_it(); 
} 

上述工作,因爲while是一個單獨的語句,因此else依然能夠「找到」的if正常。如果在while -loop的右大括號後面添加一個分號,則會破壞該結構並且不再編譯。

所以,雖然空的陳述看起來無害,但它們並不是真的應該避免。另外:當然,它們會給代碼添加無意義的混淆。

6

這裏的;被認爲是一個空語句或空語句。

樣品

int i = 0;; 

欲瞭解更多信息,可以檢查this問題。

注意事項:不要將此視爲拇指規則。有些情況下表示可能出現相同,但它們不是空語句,而是語法的一部分。例如:do..while循環

3

多餘的;是一個空的語句,在這個特定的實例中是冗餘的。在那裏你

一個實例需要使用空語句是在switch到最後的分支,不做任何事:

switch (expression) 
{ 
    case 1: 
     /*Some statements here or empty*/ 
    case 2: 
    ; /*A statement is required between here and the closing brace 
     An empty statement will suffice.*/ 
} 

你應該避免使用多餘的空報表;他們可以發出錯誤(尤其是在重構過程中將代碼放在if聲明中的情況下),並且較早的編譯器會發出抱怨。在宏中使用多餘的分號尤其有害。

+0

Errr ...那裏需要的分號如何? – DevSolar 2014-12-03 11:05:47

+0

嘗試編譯沒有它;-) – Bathsheba 2014-12-03 11:06:48

+0

曖昧。有這樣的事情,作爲貫穿案件... – DevSolar 2014-12-03 11:08:51

1

這些都是完美有效的,它們被稱爲空語句,它們什麼都不做。

int main() 
{ 
    ; 
    ; 
    ; 
    ; 
    { 
    } 
    return 0; 
} 
0

正如上面各位用戶所述,相關的分號是一個空的語句,沒有任何作用。

然而,這是一個稍微不同的故事:

#include <stdio.h> 

int main() 
{ 
    int i=5;  
    while(i--); //<--- Put the semi-colon here and see what you get. 
    { 
     printf("%d\n",i); 
    }  
    printf("Out of loop\n");  
    return 0; 
} 
0
#include<stdio.h> 

int main() 
{ 

    int i=5; 
    while(i--) 
    { 
     printf("%d\n",i); 
    }/*blank statement*/; 
    printf("Out of loop\n"); 
    return 0; 
} 

它只是一個空白的聲明。上面的 大括號本身告訴塊的結尾,然後它會處理;作爲空白頁面