2010-03-30 88 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. */ 

不必要的分号只是混乱,所以你永远不应该使用它们。