檢查邏輯表示式是否為 true

原始的 C 標準沒有內在的布林型別,因此 booltruefalse 沒有固有的含義,並且通常由程式設計師定義。通常,true 將被定義為 1,false 將被定義為 0。

Version >= C99

C99 增加了內建型別 _Bool 和標頭檔案 <stdbool.h>,它定義了 bool(擴充套件到 _Bool),falsetrue。它還允許你重新定義 booltruefalse,但請注意這是一個過時的功能。

更重要的是,邏輯表示式將評估為零的任何內容視為 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。但是,通過明確地檢查 trueif 語句只有在 (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;
    }
}