C语言中的TRUE和FALSE

C语言中的TRUE和FALSE

 

C99之前(C99中引入了_Bool),C语言没有内建的bool型变量,通常是使用宏来定义整型或字符型的常量来表示true和false(是的,可能会有人将字符型的常量定义为TRUE和FALSE,因为char型变量位域更紧凑,相对于int型会更节省空间),但通常都会使用int型。通常会使用#define或typedef来进行bool的定义,例如:#define TRUE      1(或者typedef int bool,甚至可以使用枚举,例如:enum bool {false,true};)。

这一切看着都挺不错的,解决了或者说看似满足了我们的需求,我们有了bool变量,真为1,假为0。但真的如此么?C语言中到底什么是真!任何非0值都被视为逻辑的“真”。我们定义的bool变量实际上没能够真正的表示逻辑的真与假。那么就需要注意一些细节了。很多C代码中都是满足逻辑真、假的,但真值有时候并不是1,例如函数库函数isupper()成功时返回的值就不一定是1。所以类似这种代码:if(isupper(ch) == TRUE),就是不可靠的(这种风格看似非常明确的样子,但实际上很糟糕)。

通常好的习惯是只在向bool变量赋值或作为函数参量及函数返回值的时候使用TRUE和FALSE,千万不要养成在比较中使用TRUE和FALSE的习惯。

还有一点,在C99中,因为_Bool型变量比较特殊,它只有true和false两个取值,C99标准要求实现中至少能够保存0和1两个值,所以在有的实现中它可能实际只占用1位空间,也有可能是1字节,这和具体实现有关。有个东西还是比较有趣的如果你在代码中使用宏#define _Bool int ,它是可以通过的。

你可能感兴趣的:(C语言)