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

时间:2014-09-22 12:59:31

标签: c boolean

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

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

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

    或使用typedef s。

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

3 个答案:

答案 0 :(得分:17)

那不再是真的了。自C99以来,内置布尔类型(_Bool)可用。如果您加入stdbool.h,其别名bool也适合您。


_Bool是真正的原生类型,而不是int的别名。至于其大小,标准仅指定它足以存储01。但实际上,大多数编译器的大小都是1

例如,此code snippet on ideone输出1

#include <stdio.h>
#include <stdbool.h>
int main(void) {
    bool b = true;
    printf("size of b: %zu\n", sizeof(b));
    return 0;
}

答案 1 :(得分:4)

C99添加了对布尔类型_Bool的支持,不仅仅是一个typedef,并且不必与 int 的大小相同,来自草案C99标准部分6.2.5 类型

  

声明为_Bool类型的对象足以存储值0和1。

我们通过stdbool.h标头提供了便利宏。我们可以从草案C99标准部分看到这一点7.16 布尔类型和值 whcih说:

  

标题定义了四个宏。

     

     
    

BOOL

  
     

扩展为_Bool。

     

其余三个宏适用于#if预处理指令。他们   是

     
    

  
     

扩展为整数常量1,

     
    

  
     

扩展为整数常量0和

     
    

__ bool_true_false_are_defined

  
     

扩展为整数常量1。

答案 2 :(得分:0)

由于数据类型是预定义的,因此我们无法使用“布尔”数据类型,因为该类型在文档中不存在