by沈东良/良少http://blog.csdn.net/shendl

C99标准定义了一个新的关键字_Bool,提供了布尔类型。以前,C程序员总是使用自己的方法定义布尔类型。

0表示false,非0表示true。

可能使用char类型表示一个布尔类型,也可能使用int类型表示一个布尔类型。

很多函数库都定义了自己的布尔类型和相应的宏,枚举,typedef。

现在C99把C语言原生的布尔类型带来了。

#include<stdbool.h>

这个头文件定义了bool,true,false等宏。

#ifndef__cplusplus

如果不是C++,是纯C,那么,定义宏bool相当于_Bool类型。

#definebool _Bool

#definetrue 1

#definefalse 0

#else/* __cplusplus */

如果是C++,那么定义_Bool类型为bool类型。

/*Supporting <stdbool.h> in C++ is a GCC extension. */

#define_Bool bool

#definebool bool

#definefalse false

#definetrue true

#endif/* __cplusplus */

/*Signal that all the definitions are present. */

#define__bool_true_false_are_defined 1

看看上面这个宏是否==1,如果是,表示上面这些定义可用。

C2008草案中说:

Anobject declared as type _Boolis large enough to store the values 0 and1.

也就是说,只规定了_Bool类型的大小是至少能够存放0和1这两个值。并没有规定具体的大小。这交给编译器自由发挥了。

我用gcc做了一下测试:

printf("sizeof(bool):%d\n",sizeof(bool));

printf("sizeof(char):%d\n",sizeof(char));

printf("sizeof(int):%d\n",sizeof(int));

printf("sizeof(long):%d\n",sizeof(long));

--sizeof(bool):1

--sizeof(char):1

--sizeof(int):4

--sizeof(long):8

看来gcc是用char来实现_Bool类型的。

看看给_Bool类型赋值会怎样:

boolboolean=-11212112;

printf("boolean:%d\n",boolean);

--boolean:1

看来,gcc编译器对待_Bool类型有自己的转换处理。如果是0赋值给_Bool类型,那么就赋值0。如果是任意其他数据,那么会赋值为1!(只是不知道其他编译器是否如此处理,C2008标准草案没有细说这个部分)

以前一直用!逻辑非运算符:

if(!flag){

}

来表示0和非0。现在_Bool类型就只有0和1这两个值!

转载于:https://www.cnblogs.com/armlinux/archive/2011/07/19/2390900.html

C99的新关键字_Bool相关推荐

  1. Keil中使有C99及其新特性

    Keil中使有C99及其新特性 Keil选择C99编译 C99特性介绍 Keil选择C99编译 选择C/C++,勾选C99 C99特性介绍 宏支持可变参数定义,例如 #define NRF_LOG_I ...

  2. c语言如何设置c99标准,新的C语言: C99标准介绍

    新的C语言: C99标准介绍 Randy Meyers 此篇文章摘取与即将登载于<Dr.Dobb's 软件研发>>第二期(2003年9月)的<新的C语言,C99标准介绍> ...

  3. Framework 4.0 新关键字dynamic 之我见(二)

    Hi,大家好,随着大家对VS2010的深入了解,对dynamic已经是越来越了解了,何时该用,何时不用已经非常熟悉了,原本不打算再写下去的,但感觉还有点东西需要说说,就简单再说一下吧. 原先以为dyn ...

  4. 利用ABAP 740的新关键字REDUCE完成一个实际工作任务

    ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客: ABAP News for Release 7.40 – What is ABAP 7.40? 图中的ABAP ...

  5. Go 的新关键字 any 是个啥

    在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以为这个关键字,是泛型 ...

  6. Go 新关键字 any,interface 会成历史吗?

    大家好,我是煎鱼. 在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以 ...

  7. 6.3.4 新的_Bool类型

    如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1. 这反映了C把所有的非零值都视为真. input_is_good = (scanf("%ld", &num) ...

  8. C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝

    文 / 李博 (光宇广贞) const 关键字的缺陷及 constexpr 关键字的产生 话说现行标准 C++ 98/03 对于常表达式(Constant Expression)的界定过于严格.C++ ...

  9. Java前沿分享:value或许成为java的新关键字

    2022年Java将有什么新的特性和改进,我相信很多Java开发者都想知道.结合Java语言架构师布莱恩·格茨(Brian Goetz)最近的一些分享,胖哥给大家爆个料.老规矩,点赞.再看.转发.星标 ...

  10. C++11 新关键字

    文章目录 1.auto 1.1 用法示例 2.using 3.decltype 3.1 decltype 推导规则 3.2 用法示例 4.nullptr_t 与 nullptr 5.constexpr ...

最新文章

  1. 为什么free()时不需要传指针大小
  2. 一个方法搞定安卓路由跳转
  3. epoll.h 源码记录
  4. MySQL 5.5 主从复制异步、半同步以及注意事项详解
  5. 快速计算--斐波那契数列
  6. win11非活动窗口如何设置 Windows11设置非活动窗口的步骤方法
  7. oracle 恢复坏块,Oracle 修复坏块,关掉闪回
  8. python的序列之列表
  9. 统计机器翻译与神经机器翻译区别_几十年的领域专家告诉你,机器翻译进化到哪一步了?...
  10. Your connection is not private Attackers might be trying to steal your information from nemertes.lis
  11. 犀牛Rhino中Grasshopper插件中的millipede千足虫插件安装方法
  12. nat123内网穿透
  13. pulseaudio-点点滴滴
  14. RFBNet模型推理
  15. 学计算机进中央电视台,央视评中科院博士论文致谢走红 从山坳穷学生到计算机博士...
  16. AD19--快速画原理图库文件、PCB库文件(以TL072为例)
  17. Android中gradle配置项packagingOptions简述
  18. 微信小程序将身份证隐藏、手机号、姓名用****代替
  19. 学习心得flatten函数
  20. 血泪史!外包如何找到靠谱的兼职程序员?

热门文章

  1. Sublime Text 收藏笔记
  2. TVS ESD 二极管介绍与应用
  3. Android vs iOS vs BlackBerry: Which is the most secure holiday gift?
  4. debian网络配置文件的写法
  5. vue脚手架项目中引入jquery
  6. 【hadoop】19.MapReduce-手机流量统计
  7. nrm —— 快速切换 NPM 源
  8. 通过消息跨进程发送与接收 TCopyDataStruct 数据 - 回复 skymesh
  9. Android开发人员得让短信应用程序准备好迎接巧克力棒
  10. 在linux下设置开机自动启动程序的方法