while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
};
while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
}
我想知道什麼是在把分號的目的..這兩個while循環之間有什麼區別?
while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
};
while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
}
我想知道什麼是在把分號的目的..這兩個while循環之間有什麼區別?
在代碼的唯一不同是一個分號。 但編譯後的程序集是一樣的。
第一個循環之後的分號根本不是該循環的一部分。它被解釋爲完全獨立的空語句,其位於之間的循環中。即你的實際循環被C語言視爲完全相同。
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. */
不必要的分號只是混亂,所以你永遠不應該使用它們。