【发布时间】:2014-09-22 12:59:30
【问题描述】:
我的一个朋友问了一个问题,为什么C编程语言中没有Boolean数据类型。我做了一些搜索和阅读。我在堆栈溢出中得到了几个问题和答案,
- 所有数据类型都应该是可寻址的,而一个位是不能寻址的。
- 主流CPU硬件层面的基本数据结构是字节。对这些 CPU 中的位进行操作需要额外的处理。
我们可以以这种方式使用布尔值
#define bool int
#define TRUE 1
#define FALSE 0
或使用typedefs。
但我的问题是:为什么它没有在 C 中实现为数据类型,即使在这么多年之后。实现单字节数据类型来存储布尔值而不是显式使用int 或short 是否有意义。
【问题讨论】:
-
它就在那里。查找
<stdbool.h> -
我查看了
<stdbool.h>,但它使用整数作为返回类型。为什么整数,不会 4 个字节是多余的(考虑 sizeof(int) = 4),如果我们可以只使用 1 个字节来做到这一点 -
@ralph -
sizeof(bool)取决于实现,但如果您处于 C99 模式,sizeof(bool)通常等于1。我很久以前回答过一个类似的问题:stackoverflow.com/a/10630231/297696。出于兼容性原因,较旧的实现可能会保留sizeof(bool) == sizeof(int)(或其他)。 -
@mafso 示例 -
bool b = (x & 0x8000);。如果bool是char的别名,那么即使设置了预期位,也会将其设置为false。对于以 bool 作为参数或返回 bool 的函数来说,这个问题更加隐蔽。