檢查邏輯表示式是否為 true
原始的 C 標準沒有內在的布林型別,因此 bool
,true
和 false
沒有固有的含義,並且通常由程式設計師定義。通常,true
將被定義為 1,false
將被定義為 0。
Version >= C99
C99 增加了內建型別 _Bool
和標頭檔案 <stdbool.h>
,它定義了 bool
(擴充套件到 _Bool
),false
和 true
。它還允許你重新定義 bool
,true
和 false
,但請注意這是一個過時的功能。
更重要的是,邏輯表示式將評估為零的任何內容視為 false,將任何非零評估視為 true。例如:
/* Return 'true' if the most significant bit is set */
bool isUpperBitSet(uint8_t bitField)
{
if ((bitField & 0x80) == true) /* Comparison only succeeds if true is 0x80 and bitField has that bit set */
{
return true;
}
else
{
return false;
}
}
在上面的例子中,函式試圖檢查是否設定了高位,如果是,則返回 true
。但是,通過明確地檢查 true
,if
語句只有在 (bitfield & 0x80)
評估為定義為 true
的情況下才會成功,這通常是 1
而很少是 0x80
。要麼明確檢查你期望的情況:
/* Return 'true' if the most significant bit is set */
bool isUpperBitSet(uint8_t bitField)
{
if ((bitField & 0x80) == 0x80) /* Explicitly test for the case we expect */
{
return true;
}
else
{
return false;
}
}
或者將任何非零值評估為 true。
/* Return 'true' if the most significant bit is set */
bool isUpperBitSet(uint8_t bitField)
{
/* If upper bit is set, result is 0x80 which the if will evaluate as true */
if (bitField & 0x80)
{
return true;
}
else
{
return false;
}
}