博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的TRUE和FALSE
阅读量:4111 次
发布时间:2019-05-25

本文共 734 字,大约阅读时间需要 2 分钟。

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 ,它是可以通过的。

转载地址:http://xmmsi.baihongyu.com/

你可能感兴趣的文章
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>