0. 前言
編程不是單打獨斗,而是團隊合作.
遵循一定的規則, 可以從程序上提高效率,減少出錯的概率, 並不是要我們遵循"標准答案".
活躍的思維和規范的編程風格並不沖突.
1. 定義bool型變量flag, 與零值進行比較:
可能的寫法:
- if(flag == 0)
- if(flag == FALSE)
- if(flag)
在邏輯上, 上面三個都是正確的,而且都可以編譯通過. 但是, 第一個會讓人誤以為flag是整型變量,因為這種寫法flag可以與0在數值上進行比較,也可以與其他整型比較,明顯暗示了flag是一個整型變量, 或者沒法讓別人一眼看出來flag是一個bool型變量.第二種寫法, 既然有if(flag == FALSE), 那么不可避免會寫if(flag == TRUE).TRUE的值是0, 但是FALSE的值呢?並不確定! VC++ 中TRUE的值1, VB中TRUE的值是-1.
正是因為TRUE的值不確定,所以任何比較都不建議與TRUE或者FLASE進行比較.
第三種,是推薦的廣為認可的, 對bool型變量與零值進行比較的方法.
if(flag), if(!flag)
2. 浮點型變量flag與零值比較
可能很多人都知道, 浮點型變量與任何數比較的時候, 都不可以直接比較.
因為浮點數是一種不精確的儲存方式.
但是規范的寫法是怎樣的呢?你不一定寫對:
const float EPSINON = 0.00001;
if( (x >= -EPSINON ) && (x <= EPSIONO) )
比較之前首先要設置比較的精度值, 是一個常量;
使用EPSINON可以讓你的同事很好地理解你的意圖.
3. 指針與零值進行比較
這個大家應該都沒問題:
if(NULL == flag)
別人一看就知道flag是指針變量, 而且NULL在前防止不小心少些一個=, 變成了賦值,
這樣的話你可能檢查不出來, 因為flag = NULL 總是為0, 編譯不會報錯(VS比較智能,可能會報錯).