为什么BOOL在Windows中是inttypes的?

为什么不把BOOL定义为如下的enum

 enum BOOL {FALSE, TRUE}; 

是否有任何理由为什么BOOL必须显式指定为int (或任何其他整型)?

Solutions Collecting From Web of "为什么BOOL在Windows中是inttypes的?"

来自Raymond Chen的博客文章:

布尔与VARIANT_BOOL与BOOLEAN与布尔

还有更多的方式来说同样的事情。 为什么这么多?

因为每个人都是在不同的时间被不同的人发明来解决不同的问题。

BOOL是最古老的一个 。 其定义很简单

typedef int BOOL;

C编程语言使用“int”作为它的布尔类型,当C是系统编程的很酷的语言时,Windows 1.0被写回

绝大多数的Win32 API仍然是为C设计的,所以它与兼容C的各种编程语言兼容。

枚举在编译器中存在可移植性问题,涉及字节大小和位表示的差异。 另外,直到1989年的ANSI C(也就是C98)之后, enum并没有被添加到C中,而在Windows的三次发布之后(1985年为1.0,1987年为2.0,1988年为2.1),并且枚举实际上等同于整数。

原因是C本来没有bool类型。 根据C语言规范,任何非零整数值的计算结果为真,0计算结果为假。 BOOL typedef是微软对Windows编程的一个补充。 枚举仍然会被评估为0和1(或根据机器的不同)。