while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
};
while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;
}
我想知道分号的目的是什么..
答案 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)
代码中唯一不同的是附加分号。 但编译的程序集是相同的。