bool, int, float與零的比較


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比較智能,可能會報錯).

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM