为什么布尔数据类型没有在C中实现

我的一位朋友问了一个问题,为什么C编程语言中没有Boolean数据类型。 我做了一些搜索和阅读。 我在堆栈溢出中得到的问题和答案很少说,

  1. 所有数据类型都应该是可寻址的,并且无法解决一些问题。
  2. 主流CPU硬件级别的基本数据结构是一个字节。 对这些CPU中的位进行操作需要额外的处理。

我们可以用这种方式使用bool

 #define bool int #define TRUE 1 #define FALSE 0 

或使用typedef

但我的问题是:即使经过这么多年,为什么它不是作为C中的数据类型实现的。 实现一个字节数据类型来存储布尔值而不是显式地使用intshort是没有意义的。

那不再是真的了。 内置的布尔类型,即_Bool ,自C99起可用。 如果你包含stdbool.h ,它的别名bool也适合你。


_Bool是一个真正的本机类型,而不是int的别名。 至于它的大小,标准只规定它足够大,可以存储01 。 但实际上,大多数编译器的大小都是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。