下面的兩個代碼snipets做的是完全一樣的東西嗎?while循環條件在c
do
{
Delay_us(1);
status = fetchStatus();
}while(!status);
二snipet - >
do
{
Delay_us(1);
}while(status = fetchStatus(), !status);
這是優選的?
下面的兩個代碼snipets做的是完全一樣的東西嗎?while循環條件在c
do
{
Delay_us(1);
status = fetchStatus();
}while(!status);
二snipet - >
do
{
Delay_us(1);
}while(status = fetchStatus(), !status);
這是優選的?
是的,他們這樣做,但我寧願以下幾點:
do {
Delay_us(1);
} while (!(status = fetchStatus()));
因爲它簡化了它一起到一個語句,而不是兩個。
咦?這不會減少通話的次數。 –
@StephenCanon對不起,它減少了發言的數量,謝謝指出。 –
它們具有相同的邏輯輸出。在每種情況下,都會分配狀態並進行評估,但第一種狀態更具可讀性。一般不要使用逗號運算符。
我絕不是專家,但我相信我們正在進入編譯器優化領域。這實際上取決於您使用哪種編譯器來從該代碼生成二進制文件。一個編譯器可能會像您的第一個代碼段那樣使用代碼,並將其優化爲二進制代碼,從而有效地完成第二個代碼段的功能。
它們是等效的。由於它們相當,所以都不是首選。但是,有些人可能會更喜歡美觀,因爲它比較熟悉。
你真的打算在第一次檢查狀態之前延遲嗎?
如何:
for(; !fetchStatus(); Delay_us(1));
這第二個是可怕的。第一個替代方案實際上是'while(!(status = fetchStatus())'。 –
第二個是合法的嗎?循環的條件不需要是一個有效的表達式?甚至可以評估什麼? – prelic
@prelic:這是(據我所知)一個晦澀的功能,使用時會造成混淆:http://en.wikipedia.org/wiki/Comma_operator –