[英]Omit “> 0” in conditional?
我最近繼承了一個舊項目,以進行一些優化並添加新功能。 在這個項目中,我在代碼中看到了這種情況:
if (int_variable)
代替
if (int_variable > 0)
我只對boolean
類型的變量使用了第一個選項。
您是否認為第一種選擇是檢查數字是否為正的“正確”方法?
負數也計算為true
,因此您應該使用if (int_variable > 0)
來檢查數字是否為正。
否。第一種選擇是檢查數字是否為非零的正確方法。
任何非零值都將被視為true
,因此,如果變量確實是int
,即帶符號的,則帶有>
的版本會有些粗略。 為了清楚起見,我傾向於在很多情況下都將其明確,例如
if (int_variable != 0)
也許這有點令人費解(基本上是計算一個可以自動推斷一個布爾值的布爾值),例如,我永遠不會使用if (bool_variable == true)
,但我認為整數情況可以使測試更加清晰。 大聲朗讀這兩種情況對於整數更有效。
if (int_variable)
與if (int_variable != 0)
具有相同的含義。
除非您另外知道該值永遠不會為負,否則這與if (int_variable > 0)
不同。
在C中將整數值用作真值時,零將生成false
而任何非零值都將生成true
。
在您的情況下,假設對int_variable進行了簽名,則(int_variable)
不等於(int_variable > 0)
因為int_variable
為負將分別產生true
和false
。
所以
if (int_variable) { … }
不是檢查int_variable
是否為正的正確方法。
在C語言中,任何計算結果為整數0
或空指針的表達式都被視為false。 還有其他的話。
所以基本上像
int i = ...;
if ( i )
測試i
是否為0。但是,如果i
為負,則條件也為true,因此不能替代i > 0
。 除非 i
沒有unsigned
。 僅僅因為它們不能是負面的。 但是您的編譯器可能會警告此類構造,因為它們經常顯示錯誤的概念。
談到編碼風格, if ( i )
是真的與值0
進行比較,則它是不好的風格。 您最好明確地進行比較: if ( i != 0 )
。 但是,如果i
包含一些布爾結果,則應使用“說”名稱(例如isalpha('A')
使用ctypes.h
函數而不是變量),並且不要進行比較。 比較可讀性:
char ch = ...;
if ( isalpha(ch) )
if ( isalpha(ch) != 0 )
對於后者,您必須考慮一下比較-不必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.