我的一位朋友问了一个问题,为什么C编程语言中没有Boolean
数据类型。我做了一些搜索和阅读。我在堆栈溢出中得到的问题和答案很少说,
我们可以这样使用bool
#define bool int
#define TRUE 1
#define FALSE 0
或使用typedef
s。
但我的问题是:即使经过这么多年,为什么它不是作为C中的数据类型实现的。实现一个字节数据类型来存储布尔值而不是明确使用int
或short
是没有意义的。
答案 0 :(得分:17)
那不再是真的了。自C99以来,内置布尔类型(_Bool
)可用。如果您加入stdbool.h
,其别名bool
也适合您。
_Bool
是真正的原生类型,而不是int
的别名。至于其大小,标准仅指定它足以存储0
和1
。但实际上,大多数编译器的大小都是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)
由于数据类型是预定义的,因此我们无法使用“布尔”数据类型,因为该类型在文档中不存在