为什么布尔数据类型没有在C中实现
我的一位朋友问了一个问题,为什么C编程语言中没有Boolean
数据类型。 我做了一些搜索和阅读。 我在堆栈溢出中得到的问题和答案很少说,
- 所有数据类型都应该是可寻址的,并且无法解决一些问题。
- 主流CPU硬件级别的基本数据结构是一个字节。 对这些CPU中的位进行操作需要额外的处理。
我们可以用这种方式使用bool
#define bool int #define TRUE 1 #define FALSE 0
或使用typedef
。
但我的问题是:即使经过这么多年,为什么它不是作为C中的数据类型实现的。 实现一个字节数据类型来存储布尔值而不是显式地使用int
或short
是没有意义的。
那不再是真的了。 内置的布尔类型,即_Bool
,自C99起可用。 如果你包含stdbool.h
,它的别名bool
也适合你。
_Bool
是一个真正的本机类型,而不是int
的别名。 至于它的大小,标准只规定它足够大,可以存储0
和1
。 但实际上,大多数编译器的大小都是1
:
例如, ideone上的此代码段输出1
:
#include #include int main(void) { bool b = true; printf("size of b: %zu\n", sizeof(b)); return 0; }
C99添加了对布尔类型_Bool
支持,不仅仅是一个typedef,并且不必与int的大小相同,来自草案C99标准部分6.2.5
类型 :
声明为_Bool类型的对象足以存储值0和1。
我们通过stdbool.h
头文件提供了方便的宏。 我们可以从草案C99标准部分7.16
看到这个布尔类型和值 whcih说:
标题定义了四个宏。
宏
布尔
扩展为_Bool。
其余三个宏适用于#if预处理指令。 他们是
真正
它扩展为整数常量1,
假
它扩展为整数常量0,和
__bool_true_false_are_defined
它扩展为整数常量1。