天天看點

《編寫高品質代碼:改善c程式代碼的125個建議》——建議17-3:避免在if/else語句後面添加分号“;”

本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第3章,建議17-3,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在c語言中,隻有分号“;”組成的語句稱為空語句。空語句是什麼也不執行的語句,常常被用來作為空循環體。如果你不小心在if/else 語句後面添加了分号“;”,那麼程式将很容易違背你的意願,導緻意外的運算結果,如下面的示例代碼所示:

在上面的代碼中,語句x++ 并不是在“if(x<0)”為真的時候才被調用,而是任何時候都會被調用,是以最後變量x的值為2。這究竟是怎麼回事呢?

其實,問題就出在if 語句後面的分号“;”上。我們知道,在c 語言中,分号預示着一條語句的結尾。但值得注意的是,并不是每條c 語言語句都需要分号作為結束标志。比如,if 語句的後面就并不需要分号,但如果你不小心添加了分号,編譯器并不會提示出錯。因為編譯器會把這個分号解析成一條空語句,即上面的代碼等價于下面的代碼:

其實,這種手誤性錯誤是我們很容易犯的,往往一不小心多寫了一個分号,就會導緻結果與預想的相差很遠。是以,建議大家使用null來替代空語句,這樣做可以明顯地區分真正必需的空語句和不小心多寫的分号造成的誤解,如下面的示例代碼所示:

繼續閱讀