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

C语言中的TRUE和FALSE相关推荐

  1. c语言中1代表true嘛,c++中-1是true呢还是false呢

    今天想看一下引用c++中的,然后看到网上有问c++中-1是true or false呢?用vc6.0是了一下,是true.vc6.0中应该是非0的都是true,0为false.java我也试了一下,i ...

  2. java的逻辑常量_在Java语言中,逻辑常量只有true和(__)两个值;

    [填空题]定义类的保留字是(__)定义接口的保留字是(__); [单选题]结合了不同类型的防火墙特点的是( ). [填空题]Java将运行错误分为两类:(__)和(__), 其对应的类均派生自(__) ...

  3. R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块

    R语言嵌套的ifelse语句:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用.If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块 ...

  4. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  5. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  6. go语言中channel的创建和销毁以及匿名函数的使用

    channel的创建 go语言中,任意类型前面加上关键字chan即可声明对应类型的通道,创建通道需要使用make,make也用于map 和slice的创建 创建一个通道 /*刚创建的通道是nil*/ ...

  7. 1071svm函数 r语言_如何利用R语言中的rpart函数建立决策树模型

    决策树是根据若干输入变量的值构造出一个适合的模型,以此来预测输出变量的值,并用树形结构展示出来.决策树主要有两个类别:分类树和回归树.分类树主要针对离散的目标变量,回归树则针对连续的目标变量.R语言中 ...

  8. java if和else if的区别_关于C语言中if,elseif和else的区别在哪里

    关于C语言中if,elseif和else的区别在哪里以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于C语言中if,e ...

  9. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

最新文章

  1. ubuntu bind9 配置简单记录
  2. 打架斗殴烫头酗酒抽烟的小混混,逆袭保送中国科学院,后来怎么样了?
  3. Rose VS PowerDesigner
  4. [转]asp.net权限认证:HTTP基本认证(http basic)
  5. Android -- 自定义StepView实现个人信息验证进度条
  6. 用博奥如何导入单项工程电子表_用博奥如何导入单项工程电子表_博奥常见问题处理汇总...
  7. 《Android UI基础教程》——2.1节创建一个应用
  8. Java8————Stream API
  9. 推荐 | Transformer最新成果!Learn to Dance with AIST++: Music Conditioned 3D Dance Generation!
  10. 拆轮子系列--RxJava理解(三)--observeOn
  11. 想要拥有自己的jar包吗?------超级简单的打jar包教程~~~
  12. mmseg 同义词分析器 SolrSynonymParser
  13. 卷积神经网络学习笔记与心得(2)数据集
  14. 苹果macfcpx视频剪辑软件:Final Cut Pro X
  15. 2015年9月01日【磁盘和文件系统管理】-JY1506402-19+liuhui880818
  16. 一分钟理解python里面的functools.partial
  17. 电脑桌面隐藏文件如何恢复出来呢
  18. 可能是最通俗的Lempel-Ziv-Welch (LZW)无损压缩算法详述
  19. 自动驾驶(十一)---------泰勒展开式、雅克比矩阵、主成分分析
  20. 公司要收我的毕业证书,这合法吗

热门文章

  1. 解读腾讯音乐Q3财报:营收上涨31% 音乐市场下半场战事即将开启?
  2. 知不足者好学耻下问者自满_努力克服自满情绪
  3. 安装vscode,下载很慢的解决
  4. NBIOT-BC28模块程序操作接口编写(基于STM32F103ZET6)
  5. Roguelike 游戏中的计算哲学
  6. python语言基本语句-python基本语句
  7. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 解题报告(Python C++)
  8. UE4-(反射)平面反射
  9. 配置maven镜像不起作用 Unrecognised tag: ‘mirror‘ (position: START_TAG seen ...</mirror>
  10. 量子力学 or 线性代数?(五:波函数与薛定谔方程)