这两个while循环之间有什么区别吗?

时间:2010-03-30 04:54:44

标签: c

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


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

我想知道分号的目的是什么..

3 个答案:

答案 0 :(得分:6)

第一个循环后面的分号根本不是该循环的一部分。它被解释为一个完全独立的空语句,位于循环之间。即你的实际循环被C语言看作完全相同。

答案 1 :(得分:5)

while循环执行的语句是花括号内的复合语句。分号只是一个无偿的空洞陈述。您可以将此循环编写为:

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

因为复合语句里面只有一个语句,或者是

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

当然是糟糕的风格。

如果循环不需要正文,则使用空语句。

/* 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. */

不必要的分号只是杂乱无章,所以你永远不要使用它们。

答案 2 :(得分:3)

代码中唯一不同的是附加分号。 但编译的程序集是相同的。