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};)。
false是什么函数这⼀切看着都挺不错的,解决了或者说看似满⾜了我们的需求,我们有了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 ,它是可以通过的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论