?? 主要變量類型值與零值比較合理編碼方法.txt
字號:
4.3 if 語句
if 語句是C++/C 語言中最簡單、最常用的語句,然而很多程序員用隱含錯誤的方式
寫if 語句。本節(jié)以“與零值比較”為例,展開討論。
4.3.1 布爾變量與零值比較
?? 【規(guī)則4-3-1】不可將布爾變量直接與TRUE、FALSE 或者1、0 進行比較。
根據(jù)布爾類型的語義,零值為“假”(記為FALSE),任何非零值都是“真”(記為
TRUE)。TRUE 的值究竟是什么并沒有統(tǒng)一的標準。例如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)
4.3.2 整型變量與零值比較
?? 【規(guī)則4-3-2】應當將整型變量用“==”或“!=”直接與0 比較。
假設整型變量的名字為value,它與零值比較的標準if 語句如下:
if (value == 0)
if (value != 0)
不可模仿布爾變量的風格而寫成
if (value) // 會讓人誤解 value 是布爾變量
if (!value)
4.3.3 浮點變量與零值比較
?? 【規(guī)則4-3-3】不可將浮點變量用“==”或“!=”與任何數(shù)字比較。
千萬要留意,無論是float 還是double 類型的變量,都有精度限制。所以一定要
避免將浮點變量用“==”或“!=”與數(shù)字比較,應該設法轉(zhuǎn)化成“>=”或“<=”形式。
假設浮點變量的名字為x,應當將
if (x == 0.0) // 隱含錯誤的比較
轉(zhuǎn)化為
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允許的誤差(即精度)。
4.3.4 指針變量與零值比較
?? 【規(guī)則4-3-4】應當將指針變量用“==”或“!=”與NULL 比較。
指針變量的零值是“空”(記為NULL)。盡管NULL 的值與0 相同,但是兩者意義不
同。假設指針變量的名字為p,它與零值比較的標準if 語句如下:
if (p == NULL) // p 與NULL 顯式比較,強調(diào)p 是指針變量
if (p != NULL)
不要寫成
if (p == 0) // 容易讓人誤解p 是整型變量
if (p != 0)
或者
if (p) // 容易讓人誤解p 是布爾變量
if (!p)
4.3.5 對if 語句的補充說明
有時候我們可能會看到 if (NULL == p) 這樣古怪的格式。不是程序?qū)戝e了,是程
序員為了防止將 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)
{
return x;
}
else
{
return y;
}
或者改寫成更加簡練的
return (condition ? x : y);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -