日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C 判断 —— if...else 语句(bool变量、float变量、指针变量与“零值”进行比较)(else 到底与哪个 if 配对呢? if 语句后面的分号?)

發布時間:2025/10/17 编程问答 10 豆豆

1、bool 變量與“零值”進行比較

bool 變量與“零值”進行比較的 if 語句怎么寫?

bool bTestFlag = FALSE;//想想為什么一般初始化為 FALSE 比較好?
A), if(bTestFlag == 0); if(bTestFlag == 1);
B), if(bTestFlag == TRUE); if(bTestFlag == FLASE);
C), if(bTestFlag); if(!bTestFlag);
哪一組或是那些組正確呢?我們來分析分析:
A)寫法: bTestFlag 是什么?整型變量?如果要不是這個名字遵照了前面的命名規范,
肯怕很容易讓人誤會成整型變量。所以這種寫法不好。
B)寫法: FLASE 的值大家都知道,在編譯器里被定義為 0;但 TRUE 的值呢?都是 1
嗎?很不幸,不都是 1。 Visual C++定義為 1,而它的同胞兄弟 Visual Basic 就把 TRUE 定義
為-1.那很顯然,這種寫法也不好。
大家都知道 if 語句是靠其后面的括號里的表達式的值來進行分支跳轉的。表達式如果
為真,則執行 if 語句后面緊跟的代碼;否則不執行。那顯然,本組的寫法很好,既不會引
起誤會,也不會由于 TRUE 或 FLASE 的不同定義值而出錯。記住:以后寫代碼就得這樣寫。

2、float 變量與“零值”進行比較

float 變量與“零值”進行比較的 if 語句怎么寫?
float fTestVal = 0.0;
A), if(fTestVal == 0.0); if(fTestVal != 0.0);
B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 為定義好的
精度。
哪一組或是那些組正確呢?我們來分析分析:
float 和 double 類型的數據都是有精度限制的,這樣直接拿來與 0.0 比,能正確嗎?明顯
不能,看例子: 的值四舍五入精確到小數點后 ? 10 位為: 3.1415926536,你拿它減去
0.00000000001 然后再四舍五入得到的結果是多少?你能說前后兩個值一樣嗎?
EPSINON 為定義好的精度,如果一個數落在[0.0-EPSINON,0.0+EPSINON] 這個閉區間
內,我們認為在某個精度內它的值與零值相等;否則不相等。擴展一下,把 0.0 替換為你想
比較的任何一個浮點數,那我們就可以比較任意兩個浮點數的大小了,當然是在某個精度
內。
同樣的也不要在很大的浮點數和很小的浮點數之間進行運算,比如:
10000000000.00 + 0.00000000001
這樣計算后的結果可能會讓你大吃一驚。

3、指針變量與“零值”進行比較

指針變量與“零值”進行比較的 if 語句怎么寫?
int * p = NULL;//定義指針一定要同時初始化,指針與數組那章會詳細講解。
A), if(p == 0); if(p != 0);
B), if(p); if(!p);
C) , if(NULL == p); if(NULL != p);
哪一組或是那些組正確呢?我們來分析分析:
A)寫法: p 是整型變量?容易引起誤會,不好。盡管 NULL 的值和 0 一樣,但意義不同。
B)寫法: p 是 bool 型變量?容易引起誤會,不好。
C)寫法:這個寫法才是正確的,但樣子比較古怪。為什么要這么寫呢?是怕漏寫一個
“ =”號:if(p = NULL),這個表達式編譯器當然會認為是正確的,但卻不是你要表達的意思。
所以,非常推薦這種寫法。
?

else 到底與哪個 if 配對呢?

else 常常與 if 語句配對,但要注意書寫規范,看下面例子:
if( 0 == x)
if( 0 == y) error();
else{
//program code
}
這個 else 到底與誰匹配呢?讓人迷糊,尤其是初學者。還好, C 語言有這樣的規定: else
始終與同一括號內最近的未匹配的 if 語句結合。

?

if 語句后面的分號

關于 if-else 語句還有一個容易出錯的地方就是與空語句的連用。看下面的例子:
if(NULL != p) ;
fun();
這里的 fun()函數并不是在 NULL != p 的時候被調用,而是任何時候都會被調用。問題就出
在 if 語句后面的分號上。在 C 語言中,分號預示著一條語句的結尾,但是并不是每條 C 語
言語句都需要分號作為結束標志。if 語句的后面并不需要分號, 但如果你不小心寫了個分號,
編譯器并不會提示出錯。因為編譯器會把這個分號解析成一條空語句。也就是上面的代碼實
際等效于:
if(NULL != p)
{
;
}
fun();
這是初學者很容易犯的錯誤,往往不小心多寫了個分號,導致結果與預想的相差很遠。所
以建議在真正需要用空語句時寫成這樣:
NULL;
而不是單用一個分號。這就好比匯編語言里面的空指令,比如 ARM 指令中的 NOP 指令。
這樣做可以明顯的區分真正必須的空語句和不小心多寫的分號。

使用 if 語句的其他注意事項

【規則 1-17】先處理正常情況,再處理異常情況。
在編寫代碼是,要使得正常情況的執行代碼清晰,確認那些不常發生的異常情況處理
代碼不會遮掩正常的執行路徑。這樣對于代碼的可讀性和性能都很重要。因為, if 語句總是
需要做判斷,而正常情況一般比異常情況發生的概率更大(否則就應該把異常正常調過來
了),如果把執行概率更大的代碼放到后面,也就意味著 if 語句將進行多次無謂的比較。另
外,非常重要的一點是,把正常情況的處理放在 if 后面,而不要放在 else 后面。當然這也
符合把正常情況的處理放在前面的要求。
【規則 1-18】確保 if 和 else 子句沒有弄反。
這一點初學者也容易弄錯,往往把本應該放在 if 語句后面的代碼和本應該放在 else 語
句后面的代碼弄反了。

總結

以上是生活随笔為你收集整理的C 判断 —— if...else 语句(bool变量、float变量、指针变量与“零值”进行比较)(else 到底与哪个 if 配对呢? if 语句后面的分号?)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。