C 表示式 if 語句

2021-09-06 10:06:16 字數 2115 閱讀 9867

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

1布林變數與零值比較

【規則4-3-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整型變數與零值比較

【規則4-3-2應當將整型變數用「==」或「!=」直接與0比較。

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

if (value == 0) 

if (value != 0)

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

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

if (!value)

3浮點變數與零值比較

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

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

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

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

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

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

4指標變數與零值比較

【規則4-3-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是布林變數

if (!p)        

5對if語句的補充說明

有時候我們可能會看到 if (null == p) 這樣古怪的格式。不是程式寫錯了,是程式設計師為了防止將 if (p == null) 誤寫成 if (p = null),而有意把p和null顛倒。編譯器認為 if (p = null) 是合法的,但是會指出 if (null = p)是錯誤的,因為null不能被賦值。

程式中有時會遇到if/else/return的組合,應該將如下不良風格的程式

if (condition) 

return x;

return y;

改寫為if (condition)

else

或者改寫成更加簡練的

return (condition ? x : y)

表示式語句

語句分為簡單語句和復合語句,簡單語句由乙個單獨的邏輯行構成。多條簡單語句可以存在於同一行內並以分號分隔。表示式語句屬於簡單語句。表示式語句用於計算和寫入值 大多是在互動模式下 或者呼叫乙個過程 過程就是不返回有意義結果的函式。在 python 中,過程的返回值為 none 表示式語句會對指定的表示式...

Python中的語句 表示式語句 表示式

前面幾篇文章,介紹了python中的核心物件型別 有數字 字串 列表 字典 元組等。python中除了這些核心型別外,還有一項重要的基礎 語句。那麼語句是什麼呢?語句就是寫出來句子來告訴python應該去幹什麼。程式由模組構成 模組包含語句 語句包含表示式 表示式處理物件整個邏輯就是 使用語句來實現...

表示式與語句

表示式是由運算子和運算元組合構造成。最簡單的表示式是乙個單獨的運算元,以此作為基礎,結合語言自身支援的操作符,就可以建立複雜的表示式。下面是一些表示式 4 53.14 9 a b 7 30 b 5 從這裡可以看到,運算元可以是資料常量 4,5 變數 a,b 或者是二者的組合 b 7 每乙個表示式都有...