《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和指针》
相关推荐
ZCollapsar.21 分钟前
数据结构 02(线性:顺序表)
c语言·数据结构·学习·算法
JasmineX-11 小时前
直流电机驱动与TB6612
c语言·stm32·单片机·嵌入式硬件
初级炼丹师(爱说实话版)3 小时前
c语言中的数组可以用int a[3]来创建。写一次int就可以了,而java中要声明两次int类型像这样:int[] arr = new int[3];
java·c语言
艾莉丝努力练剑18 小时前
【C语言16天强化训练】从基础入门到进阶:Day 11
c语言·学习·算法
凤年徐21 小时前
【数据结构与算法】LeetCode 20.有效的括号
c语言·数据结构·算法·leetcode
JuneXcy1 天前
流程控制语句(3)
c语言·算法
凤年徐1 天前
【数据结构】LeetCode160.相交链表 138.随即链表复制 牛客——链表回文问题
c语言·数据结构·c++·算法·leetcode·链表
艾莉丝努力练剑1 天前
【C语言16天强化训练】从基础入门到进阶:Day 14
java·c语言·学习·算法
纵有疾風起1 天前
数据结构——队列
c语言·数据结构·算法·链表
用户6120414922131 天前
C语言做的量子计算模拟器
c语言·后端·量子计算