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

CHA*_*HAN 0 c

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


while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
    SERIAL_SERVICE_WDOG;
}
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 6

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


Jim*_*ans 5

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

while ((R_SPI2SR & B_SPIF) != B_SPIF)
    SERIAL_SERVICE_WDOG;
Run Code Online (Sandbox Code Playgroud)

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

while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
    SERIAL_SERVICE_WDOG;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;   
Run Code Online (Sandbox Code Playgroud)

这当然是可怕的风格.

当您有一个不需要主体的循环时,将使用空语句.

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

您想要注意过早结束循环的经典错误:

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

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