我的一个朋友问了一个问题,为什么BooleanC编程语言中没有数据类型.我做了一些搜索和阅读.我在堆栈溢出中得到的问题和答案很少说,
我们可以用这种方式使用bool
#define bool int
#define TRUE 1
#define FALSE 0
Run Code Online (Sandbox Code Playgroud)
或使用typedefs.
但我的问题是:即使经过这么多年,为什么它不是作为C中的数据类型实现的.实现一个字节数据类型来存储布尔值而不是使用int或short显式是没有意义的.
Yu *_*Hao 18
那不再是真的了.内置的布尔类型,也_Bool就是自C99以来可用.如果你包括stdbool.h,它的别名bool也适合你.
_Bool是一个真正的本机类型,而不是别名int.至于它的大小,标准只规定它足够大,可以存储0和1.但在实践中,大多数编译器都会确定其大小1:
#include <stdio.h>
#include <stdbool.h>
int main(void) {
bool b = true;
printf("size of b: %zu\n", sizeof(b));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C99 添加了对 boolean 类型的支持_Bool,它不仅仅是一个 typedef,也不必与int大小相同,来自 C99 标准草案6.2.5 Types:
声明为 _Bool 类型的对象足够大,可以存储值 0 和 1。
我们通过stdbool.h标题有方便的宏。我们可以从 C99 标准草案7.16 布尔类型和值中看到这一点,其中说:
标头定义了四个宏。
宏观
布尔值
扩展为 _Bool。
其余三个宏适合在 #if 预处理指令中使用。他们是
真的
扩展到整数常量 1,
错误的
它扩展到整数常量 0,并且
__bool_true_false_are_已定义
它扩展到整数常量 1。