簡體   English   中英

在條件中忽略“> 0”嗎?

[英]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為負將分別產生truefalse


所以

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM