我的一个朋友问了一个问题,为什么C编程语言中没有Boolean
数据类型。我做了一些搜索和阅读。在stackoverflow上找到了一些问题和答案,其中有几个回答如下:
- 所有的数据类型都应该是可寻址的,而一个位是不能被寻址的。
- 主流CPU的基本数据结构是字节。在这些CPU上操作位需要额外的处理。
我们可以用bool来代替。
#define bool int
#define TRUE 1
#define FALSE 0
或者使用 typedef
。
但我的问题是:即使经过这么多年,为什么它没有在C语言中作为数据类型实现。使用一个字节的数据类型来存储布尔值是否比显式地使用 int
或 short
更合理呢?
<stdbool.h>
。 - P.Psizeof(bool)
的大小取决于具体实现。但如���你使用C99标准,通常sizeof(bool)
等于1。我曾经在很久以前回答过类似的问题:https://dev59.com/Zmgv5IYBdhLWcg3wY_82#10630231。为了保持兼容性,旧的实现可能会将`sizeof(bool)`设置为`sizeof(int)`或其他��。 - wklisValid
、hasAttribute
、needsFree
等等。而且(正如其他人所说,在C中一个位不可寻址),没有任何性能收益可以证明这种事情是合理的。C语言被设计得非常简洁(今天稍微好一些,但仍然如此)。 - mafsobool b = (x & 0x8000);
。如果bool
是char
的别名,则即使设置了预期的位,它也会将其设置为false
。对于以bool
作为参数或返回值的函数,这个问题更加隐蔽。 - M.M