天天看點

《編寫高品質代碼:改善c程式代碼的125個建議》——建議16-3:盡量避免在表達式中使用預設的優先級

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

在c語言中,運算符的優先級如表2-1所示。

《編寫高品質代碼:改善c程式代碼的125個建議》——建議16-3:盡量避免在表達式中使用預設的優先級
《編寫高品質代碼:改善c程式代碼的125個建議》——建議16-3:盡量避免在表達式中使用預設的優先級

雖然c語言中的運算符都有自己的優先級别,但是為了提高程式的可讀性,防止閱讀程式時産生誤解,防止因預設的優先級與設計思想不符而導緻程式出錯,我們應該盡量避免使用預設的優先級。如果代碼行中的運算符比較多,應當用括号明确表達式的計算順序,進而避免采用預設的運算符優先級。

來看下面的示例代碼:

在上面的代碼中,我們用括号來明确表達式的計算順序,使程式看起來非常直覺,具有良好的可讀性。現在,我們采用預設的運算符優先級來改寫上面的代碼:

根據表2-1的運算符優先級原則,“a | b && a & c”等價于“ (a | b) && (a & c)”,第一個if語句“if (a | b && a & c)”不會出錯,但語句卻不易了解;再來看第二個if語句“if (a | b < c & d)”,因為“<”運算符的優先級比“|”與“&”運算符高,是以“a | b < c & d”等價于“a |(b < c)& d”,這就造成了判斷條件出錯。

最後還需要說明的是,除了可以通過括号的方式來明确表達式的計算順序,避免使用預設的運算符優先級,還需要遵循表達式簡潔原則,盡量避免在表達式中把不同類型的操作符混合起來。

繼續閱讀