C if 語句的正確書寫方式

2021-07-14 11:34:13 字數 1381 閱讀 2323

if 語句是c++/c 語言中最簡單、最常用的語句,然而很多程式設計師用隱含錯誤的方式寫if 語句。本節以「與零值比較」為例,展開討論。

1、布林變數與零值比較

【規則一】不可將布林變數直接與true、false 或者1、0 進行比較。

根據布林型別的語義,零值為「假」(記為false),任何非零值都是「真」(記為true)。true 的值究竟是什麼並沒有統一的標準。例如visual c++ 將true 定義為1,而visual basic 則將true 定義為-1。

假設布林變數名字為flag,它與零值比較的標準if 語句如下:

if (flag) // 表示flag 為真

if (!flag) // 表示flag 為假

其它的用法都屬於不良風格,例如:

if (flag == true)

if (flag == 1 )

if (flag == false)

if (flag == 0)

2、整型變數與零值比較

【規則二】應當將整型變數用「==」或「!=」直接與0 比較。

假設整型變數的名字為value,它與零值比較的標準if 語句如下:

if (value == 0)

if (value != 0)

不可模仿布林變數的風格而寫成

if (value) // 會讓人誤解 value 是布林變數

if (!value)

3、浮點變數與零值比較

【規則三】不可將浮點變數用「==」或「!=」與任何數字比較。

千萬要留意,無論是float 還是double 型別的變數,都有精度限制。所以一定要避免將浮點變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式。

假設浮點變數的名字為x,應當將

if (x == 0.0) // 隱含錯誤的比較

轉化為if ((x>=-epsinon) && (x<=epsinon))

其中epsinon 是允許的誤差(即精度)。

4、指標變數與零值比較

【規則四】應當將指標變數用「==」或「!=」與null 比較。

指標變數的零值是「空」(記為null)。儘管null 的值與0 相同,但是兩者意義不同。假設指標變數的名字為p,它與零值比較的標準if 語句如下:

if (p == null) // p 與null 顯式比較,強調p 是指標變數

if (p != null)

不要寫成

if (p == 0) // 容易讓人誤解p 是整型變數

if (p != 0)

或者if (p) // 容易讓人誤解p 是布林變數

C if語句中的短路效應

邏輯與運算子 和邏輯或運算子 都是從左到右結合的,在計算機包含 或 的表示式時,一旦能確定整個表示式的值,求解就會立即停止。例如 includeint main 執行結果是 true.a 10,b 10,c 2 說明 if語句後面的條件 a b c b 的計算順序是先求解a b,其值是10 a已經賦...

if語句的書寫規範

一 bool值和零比較 bool型別是在c99標準中才引入的乙個語法特點,用的很少,一般情況下我們都使用整形變數來充當bool變數的角色 int flag if flag true if flag false 上面這個是錯誤寫法。因為在c語言中bool值的語義是 0表示假,非0表示真 define ...

if else 語句的空else語句書寫

寫法1 if 略 else 寫法2 if 略 else 兩種執行方式沒有區別,效果一樣的!都不會執行什麼!都可以。表示空語句 因為 中可以插入0 任意多條語句,空語句也算一條語句。所以以下幾種寫法都是合法的 else 0條語句 else else else 因此,可以有,但是是多餘的。如果沒有大括號...