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. */
不必要的分号只是混乱,所以你永远不应该使用它们。