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