《C和指针》笔记20:布尔值的注意事项

比较布尔值的时候下面的代码看起来是一样的。

c 复制代码
#define FALSE 0
#define TRUE 1
if(flag == FALSE)
if(!f1ag)
...
if(flag == TRUE)
if(flag)
...

但是,如果flag设置为任意的整型值,那么第2对语句就不是等价的。只有当flag确实是TRUE或FALSE,或者是关系表达式或逻辑表达式的结果值时,两者才是等价的。

解决所有这些问题的方法是避免混合使用整型值和布尔值。如果一个变量包含了一个任意的整型值,应该显式地对它进行测试:

c 复制代码
//下面的语句暗示是一个整型值的比较
if( value != 0 ) ...

不要使用简写法来测试变量是零还是非零,因为这类形式错误地暗示该变量在本质上是布尔型的。

如果一个变量用于表示布尔值,应该始终把它设置为0或者1,例如:

c 复制代码
positive_cash_flow = cash_balance >= 0;

不要通过把它与任何特定的值进行比较来测试这个变量**(布尔型)**是否为真值,哪怕是与TRUE或FALSE进行比较。相反,应该像下面这样测试变量的值:

c 复制代码
//下面的语句暗示是一个布尔型的比较
if( positive_cash_flow ) ...
if( !positive_cash_flow ) ...

使用布尔型的变量应该选择使用描述性的语言描述,比如:如果现金流量为正,那么 ...

参考

  1. 《C和指针》
相关推荐
学不动CV了1 小时前
C语言32个关键字
c语言·开发语言·arm开发·单片机·算法
学不动CV了3 小时前
ARM单片机OTA解析(一)
c语言·arm开发·stm32·单片机·嵌入式硬件·51单片机
草莓熊Lotso6 小时前
【数据结构初阶】--顺序表(二)
c语言·数据结构·经验分享·其他
秋说6 小时前
【PTA数据结构 | C语言版】出栈序列的合法性
c语言·数据结构·算法
森焱森12 小时前
一文理解锂电池充电、过放修复与电量测量:从原理到实战
c语言·单片机·架构
艾莉丝努力练剑13 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(五)
c语言·开发语言·数据结构·学习·算法
XH华14 小时前
C语言第一章数据类型和变量(上)
c语言·开发语言
暗影~行星14 小时前
C语言,结构体指针案例
c语言·开发语言
(Charon)14 小时前
C语言手写简易 DNS 客户端(接收部分)
c语言·开发语言
秋说15 小时前
【PTA数据结构 | C语言版】后缀表达式求值
c语言·数据结构·算法