检查逻辑表达式是否为 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;
    }
}