### C语言关键字浅析系列 ###

### ISO/ANSI C 关键字 ###

_Bool关键字看上去并不像C语言其他常见的关键字,更像是个变量名

这样的下划线开头的关键字在C语言有三个:_Bool、_Complex、_Imaginary

如果你清楚C或C++语言的bool类型,看到_Bool可能会第一时间联想到bool类型,实际上它们也差不多

_Bool的作用是:

声明布尔变量。

1、_Bool的使用

与定义变量的类型关键字一样,_Bool以下面这种方式定义布尔变量:

/* 负责输入值的语句 */
int i;
_Bool input_over;   /* 布尔变量名可以取得顾名思义一些 */
input_over = scanf("%d", &i);
while (!input_over)
{printf("Error, input again:");scanf("%d", &i);
}

一般的,一个_Bool变量只能有两个值——1/0,分别表示真/假,如果把它赋值为另一个非零值,则变量还是被赋值为1

所以对于_Bool类型,任何非零值在逻辑表达式中都被认为是“真”,只有0表示“假”

2、_Bool、BOOL、bool傻傻分不清

虽然从作用上看,三者都可以表示布尔类型,不过他们还是有着自己的故事,甚至本质的区别

(1)BOOL

生在上世纪后半叶,并且从事计算机科学的话,你就会知道,那时候的C语言中没有bool这样的类型。那如何表示这种布尔关系呢?

微软说,不是还有typedef吗,故其自作主张,定义了BOOL这种类型,不过它的实质其实是:

typedef int BOOL;

也就是说,BOOL类型其实是一个int类型,所以它占用的内存放在32位int的机器中是4byte,这其实比后来的bool要大很多倍

现在编写C程序的时候BOOL可能用的不太多,如果还需要使用BOOL,可以记住它原本的自定义,自己加在程序中,或者引用包

不过现在写布尔类型一般都用_Bool和bool了

(2)bool

其实在C99之前,C语言没有bool类型这个说法,对于C语言,bool类型相当于舶来语、外来客

这是一段尘封的历史:一个关键的结点就是1992年,Microsoft Visual C++ 1.0推出,在这之前,微软使用自定义的BOOL类型表示布尔变量,布尔变量的bool其实是来源于英国数学家乔治·布尔(George Boole)。

92年之前,那时候C的“布尔类型”都是用整数类型表示,但C++的推出,出现了bool类型的定义,注意bool类型在C++的标准中从最初开始就一直有。而作为C的扩展的C++中有了bool的定义,C自己当时却仍然没有对布尔类型的定义,于是在C99标准中,新增了_Bool类型,其本质和用法与C++的bool是类似的。

不过需要注意的是,目前的C语言版本中仍然只支持_Bool不支持bool,C++中也不一定支持_Bool而都使用bool,这也算是二者的一个区别。其联系在于,用法差不多,本质也类似,都只占用1byte内存。其实原理上来说1bit就能表示真假,不过C语言中非零值都表示真,0表示假,1byte的内存允许用户用其他非零值表示真,可能会带来某些程序实现上的便利。

(3)_Bool

也就是说,C语言见其后起之秀C++中一开始就有了bool类型的定义,而自己仍然在使用整型表示布尔关系,不服气

一气之下在C99中新增了_Bool类型,而且看上去和bool不一样,有点我行我素的意味在里面,不过C++的bool确实比C的_Bool出现的早

3、C语言标准的发展史

1978年,国内正值改革开放,而大洋对岸也发生了一件计算机行业内比较轰动的事——K&R C标准出现

K&R其实是两位大神,Brian Kernighan和Dennis Ritchie的简称,后者对于程序员再熟悉不过了,即丹尼斯·里奇,C语言和UNIX之父

二位合作发行了一本书——《The C Programming Language》的第一版,该书最有意义的部分在于末尾的参考指南

别小看这份参考指南,它给出了一份当时C语言的完整定义,这被认为是C语言出现后的第一项C标准,被称为K&R C

随后C语言迎来了第一春,跑在了很多的各类机型上,C程序软件也一时风靡,受到了广泛支持

逐渐的,由于C的广泛应用和各种人们新增的特性被写到了各类编译器中,考虑到保证C的良好移植性,业内渴求一份新的更全面的C标准

于是乎,1983年,ANSI(美国国家标准协会)开始组织部门研究C语言的新标准,该标准于1989年被ANSI通过,称为C89或者ANSI C

至此,C语言有了国家级的标准,而国界不是阻拦C语言漂洋过海发展的拦路虎,C语言的更广泛应用不能缺少国际标准的制定

ANSI C通过后,《The C Programming Language》的第二版也根据C89开始编撰和发行,C89在技术上相比K&R C完善了很多

次年,1990年,在ISO(国际标准化组织)的努力下,通过了ANSI C成为国际标准,即ANSI C成为了ISO C

二者在标准文档上有细微区别,但技术上没有改变,所以ISO/ANSI C从技术上说是一样的

随后ISO还是对ISO C的文档继续做了一些功课,完善了很多文字上的细节问题,扩充了点文档(毕竟作为标准,文档要认真下功夫)

在1995年又发布了扩充后的ISO C标准,史称C95

离目前最关键的一次标准制定是1999年发生的,ISO/ANSI根据时代的变化在技术上加了一些东西,包括_Bool等一些关键字的新增,一些技术上的改动,为用户在技术层面提供了更好的便利性,这就是目前还在遵循的C99标准,是至今2018年最权威和最新的C标准。

_Bool、_Complex、_Imaginary就是C99新增的三种基本数据类型

——参考《C Primer Plus第五版》

C语言关键字浅析-_Bool相关推荐

  1. C语言关键字浅析-enum

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### enum关键字的原型是enumerated type,意思是枚举类型 这是ISO/ANSI C90标准新增的关键字之 ...

  2. C语言关键字浅析-return

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### return关键字是C程序中最常见的关键字之一 对于一个最简单的demo程序,或者说你最早接触的HELLO WORL ...

  3. C语言关键字浅析-double

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### double关键字声明一种称之为"双精度"的浮点数据类型 其"双"之处在于与 ...

  4. C语言关键字浅析-float

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### float从单词的字面上看是"浮动"的意思 在C语言中,float表示一种基本数据类型,浮点型, ...

  5. C语言关键字浅析-do

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### do关键字在C语言中不能单独使用 它需要和while关键字配套使用表示一种退出条件循环结构 其区分于while循环和 ...

  6. C语言关键字浅析-while

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### while在英文中常被翻译为"在--的时候,当--时",私以为在C语言的while里,应当为&q ...

  7. C语言关键字浅析-_Imaginary

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### _Imaginary是C99新增的关键字,表示一种基本数据类型--虚数 与_Complex一样,该类型的出现主要是为 ...

  8. C语言关键字浅析-short

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### short,本意是"短,矮"的意思,在C语言中声明一种短整数类型,与long相对应 short与 ...

  9. C语言关键字浅析-switch

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### switch在英文中是"开关"的意思,比如switch on和switch off可以表示电灯的 ...

  10. C语言关键字浅析-const

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### const关键字是ISO/ANSI C90标准新添加的关键字之一 同期的"新生"还有enum.s ...

最新文章

  1. 为什么要在linux命令前加上 ./
  2. Xamarin XAML语言教程构建ControlTemplate控件模板 (三)
  3. 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...
  4. NOI2012 美食节
  5. 吴恩达深度学习课程deeplearning.ai课程作业:Class 2 Week 1 1.Initialization
  6. BZOJ-2761-不重复数字
  7. 使用python移动飞信模块发送短信
  8. 『转』line-height
  9. webpack --- 发布环境的配置 代码压缩 代码分类
  10. 【深度学习】——利用pytorch搭建一个完整的深度学习项目(构建模型、加载数据集、参数配置、训练、模型保存、预测)
  11. 子函数的指针释放问题
  12. 【MySQL】MySQL基础理论学习笔记
  13. 使用tc对linux中某ip段限速
  14. 云计算数据中心网络性能测试
  15. 锋利Jquery 第一天
  16. Github开源人体姿态识别项目OpenPose中文文档
  17. 福昕pdf转word免费版下载(附教程)
  18. 怦然心动(Flipped)-4
  19. 【深度】谭铁牛院士谈人工智能发展新动态
  20. K8S官方部署方式以及自签SSL证书介绍

热门文章

  1. jQuery ajax 文件上传携带附加参数
  2. 用cmd下载python库先安装_python 安装库几种方法之cmd,anaconda,pycharm详解
  3. Navicat连接Linux下MySQL
  4. 基于SSM的电脑商城
  5. 计算机辅助教学:多媒体课件制作教程,多媒体课件制作5步曲!
  6. hp服务器系统如何用u盘恢复,软硬件技巧 篇三:HP战66之恢复U盘制作,以及恢复系统之体验感想...
  7. 解决unable to find a qt build,to solve this problem specify a qt build
  8. java设置word页面为A3_word页面怎么设置为A3打印格式
  9. authware_在yonohub上轻松使用autoware auto
  10. 汇编语言王爽第四版第七章(实验六)