C99的新关键字_Bool
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相关推荐
- Keil中使有C99及其新特性
Keil中使有C99及其新特性 Keil选择C99编译 C99特性介绍 Keil选择C99编译 选择C/C++,勾选C99 C99特性介绍 宏支持可变参数定义,例如 #define NRF_LOG_I ...
- c语言如何设置c99标准,新的C语言: C99标准介绍
新的C语言: C99标准介绍 Randy Meyers 此篇文章摘取与即将登载于<Dr.Dobb's 软件研发>>第二期(2003年9月)的<新的C语言,C99标准介绍> ...
- Framework 4.0 新关键字dynamic 之我见(二)
Hi,大家好,随着大家对VS2010的深入了解,对dynamic已经是越来越了解了,何时该用,何时不用已经非常熟悉了,原本不打算再写下去的,但感觉还有点东西需要说说,就简单再说一下吧. 原先以为dyn ...
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客: ABAP News for Release 7.40 – What is ABAP 7.40? 图中的ABAP ...
- Go 的新关键字 any 是个啥
在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以为这个关键字,是泛型 ...
- Go 新关键字 any,interface 会成历史吗?
大家好,我是煎鱼. 在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以 ...
- 6.3.4 新的_Bool类型
如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1. 这反映了C把所有的非零值都视为真. input_is_good = (scanf("%ld", &num) ...
- C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝
文 / 李博 (光宇广贞) const 关键字的缺陷及 constexpr 关键字的产生 话说现行标准 C++ 98/03 对于常表达式(Constant Expression)的界定过于严格.C++ ...
- Java前沿分享:value或许成为java的新关键字
2022年Java将有什么新的特性和改进,我相信很多Java开发者都想知道.结合Java语言架构师布莱恩·格茨(Brian Goetz)最近的一些分享,胖哥给大家爆个料.老规矩,点赞.再看.转发.星标 ...
- C++11 新关键字
文章目录 1.auto 1.1 用法示例 2.using 3.decltype 3.1 decltype 推导规则 3.2 用法示例 4.nullptr_t 与 nullptr 5.constexpr ...
最新文章
- 为什么free()时不需要传指针大小
- 一个方法搞定安卓路由跳转
- epoll.h 源码记录
- MySQL 5.5 主从复制异步、半同步以及注意事项详解
- 快速计算--斐波那契数列
- win11非活动窗口如何设置 Windows11设置非活动窗口的步骤方法
- oracle 恢复坏块,Oracle 修复坏块,关掉闪回
- python的序列之列表
- 统计机器翻译与神经机器翻译区别_几十年的领域专家告诉你,机器翻译进化到哪一步了?...
- Your connection is not private Attackers might be trying to steal your information from nemertes.lis
- 犀牛Rhino中Grasshopper插件中的millipede千足虫插件安装方法
- nat123内网穿透
- pulseaudio-点点滴滴
- RFBNet模型推理
- 学计算机进中央电视台,央视评中科院博士论文致谢走红 从山坳穷学生到计算机博士...
- AD19--快速画原理图库文件、PCB库文件(以TL072为例)
- Android中gradle配置项packagingOptions简述
- 微信小程序将身份证隐藏、手机号、姓名用****代替
- 学习心得flatten函数
- 血泪史!外包如何找到靠谱的兼职程序员?