分號是結束一條語句的,while帶著一塊是一條完整的語句,它需要分號結束。對while(條件) {語句}這樣的形式,因爲花括號中有語句,它本身有分號結束,所以到了while塊的右花括號就不需再加分號(加了也不錯,只是另外一條空語句而已,相當於在while下面一面單獨寫;作一行)。但如果while循環體内沒有任何語句,那麽就必須用分號結束while語句,正規的寫法應是:
while(...)
{
;
}
而不是:
while(...)
{
};
後者與while(...){}等同,原理上應報語法錯誤。
如果不寫花括號,則while(...);緊接著的分號是結束while語句的,不作另行計。除我所說第一種正規寫法外,其餘都很容易出現歧義,不提倡——即使真是空循環也最好寫成那樣,很明確,自己和閲讀的人都很清楚寫作者是深知那個的確是空循環而不是疏漏,最好再加註釋寫明“空循環”。我沒把握描紅的寫法會不會報錯或是跟編譯器有關,但從來不會這樣寫,你可以測試一下,以編譯器的結果為準。
函數原型聲明的分號,是原型聲明要求的語法,編譯器據此判斷該行為原型聲明,不視爲函數定義。正如#define不能有分號一樣,都是語法要求。
[
本帖最后由 TonyDeng 于 2011-12-17 13:38 编辑 ]