2010-03-30 78 views

回答

3

在代碼的唯一不同是一個分號。 但編譯後的程序集是一樣的。

6

第一個循環之後的分號根本不是該循環的一部分。它被解釋爲完全獨立的空語句,其位於之間的循環中。即你的實際循環被C語言視爲完全相同。

5

while循環執行的語句是大括號內的複合語句。分號只是一個沒有意義的空白語句。你可以寫這個循環爲:

while ((R_SPI2SR & B_SPIF) != B_SPIF) 
    SERIAL_SERVICE_WDOG; 

由於複合語句只是在其內部具有一個單獨的語句,或者作爲

while ((R_SPI2SR & B_SPIF) != B_SPIF) 
{ 
    SERIAL_SERVICE_WDOG;;;;;;;;;;;;;;; 
};;;;;;;;;;;;;; 

這當然是可怕的風格。

當您有一個不需要body的循環時,會使用空語句。

/* Throw away remaining characters up to the end of line. */ 
while ((c = getchar()) != '\n') 
    ; 

你要注意提前結束一個循環的典型錯誤:

int i = 1; 
int j = 1; 
while (i < 10); /* The semicolon here ends the loop... */ 
    j *= i++;  /* ... so this statement is only executed once. */ 

不必要的分號只是混亂,所以你永遠不應該使用它們。

相關問題