if语句后面的分号
if語句后面的分號
關(guān)于if-else 語句還有一個容易出錯的地方就是與空語句的連用??聪旅娴睦?#xff1a; if(NULL != p) ; fun();?
這里的fun()函數(shù)并不是在NULL != p 的時候被調(diào)用,而是任何時候都會被調(diào)用。問題就出在if 語句后面的分號上。在C 語言中,分號預(yù)示著一條語句的結(jié)尾,但是并不是每條C 語言語句都需要分號作為結(jié)束標(biāo)志。if 語句的后面并不需要分號,但如果你不小心寫了個分號,編譯器并不會提示出錯。因?yàn)榫幾g器會把這個分號解析成一條空語句。也就是上面的代碼實(shí)際等效于:?
if(NULL != p)?
{?
else?
{?
//program code
}?
}
fun();?
這是初學(xué)者很容易犯的錯誤,往往不小心多寫了個分號,導(dǎo)致結(jié)果與預(yù)想的相差很遠(yuǎn)。所以建議在真正需要用空語句時寫成這樣: NULL; 而不是單用一個分號。這就好比匯編語言里面的空指令,比如ARM 指令中的NOP 指令。這樣做可以明顯的區(qū)分真正必須的空語句和不小心多寫的分號。
關(guān)于if-else 語句還有一個容易出錯的地方就是與空語句的連用??聪旅娴睦?#xff1a; if(NULL != p) ; fun();?
這里的fun()函數(shù)并不是在NULL != p 的時候被調(diào)用,而是任何時候都會被調(diào)用。問題就出在if 語句后面的分號上。在C 語言中,分號預(yù)示著一條語句的結(jié)尾,但是并不是每條C 語言語句都需要分號作為結(jié)束標(biāo)志。if 語句的后面并不需要分號,但如果你不小心寫了個分號,編譯器并不會提示出錯。因?yàn)榫幾g器會把這個分號解析成一條空語句。也就是上面的代碼實(shí)際等效于:?
if(NULL != p)?
{?
else?
{?
//program code
}?
}
fun();?
這是初學(xué)者很容易犯的錯誤,往往不小心多寫了個分號,導(dǎo)致結(jié)果與預(yù)想的相差很遠(yuǎn)。所以建議在真正需要用空語句時寫成這樣: NULL; 而不是單用一個分號。這就好比匯編語言里面的空指令,比如ARM 指令中的NOP 指令。這樣做可以明顯的區(qū)分真正必須的空語句和不小心多寫的分號。
總結(jié)
- 上一篇: 指针变量p与“零值”进行比较的if 语句
- 下一篇: case 关键字后面的的值有什么要求吗?