9.2 关于C语言中True的问题

问题:

因为在C 语言中所有的非零值都被看作“真”, 是不是把TRUE 定义为1 很危险?

如果某个内置的函数或关系操作符“返回” 不是1的其它值怎么办?

C 语言中的确任何非零值都都被看作真, 但这仅限于“输入”, 也就是说, 仅限于需要布尔值的地方。

内建操作符生成布尔值时, 可以保证为1 或0。

因此, 这样的测试if((a == b) == TRUE)能如愿运行(只要TRUE 为1), 但显然这很傻。

事实上, 跟TRUE 和FALSE的跟TRUE 和FALSE 的显示比较都不合适, 因为有些库函数(如isupper(),isalpha() 等) 在成功时返回非零值, 但不一定为1。

(再说, 如果你认为“if((a == b)== TRUE)” 比“if(a == b)” 好, 为什么就此打住呢?为什么不使用“if(((a == b)== TRUE) == TRUE)” 呢?)

一般规则是只在向布尔变量赋值或函数参数中才使用TRUE 和FALSE (或类似的东西), 或者用于函数的返回值, 但决不用于比较。

预处理宏TRUE 和FALSE (当然还有NULL) 只是用于增加代码可读性, 而不是因为其值可能改变。

(参见问题5.3 和5.8。)

尽管使用TRUE 和FALSE 这样的宏(或者YES 和NO) 看上去更清楚, 布尔
值和定义在C 语言中的复杂性让很多程序员觉得TRUE 和FALSE 宏不过更令人迷惑, 因而更喜欢使用1 和0。

参见问题5.7。

永不止步步 发表于01-16 14:45 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号