为什么Windows中的BOOL是int类型?

时间:2017-07-01 17:56:28

标签: c windows winapi

为什么不将BOOL定义为enum,如:

enum BOOL {FALSE, TRUE};

是否有任何理由必须将BOOL 明确指定为int(或任何其他整数类型)?

2 个答案:

答案 0 :(得分:6)

来自Raymond Chen关于此主题的博客文章:

BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool

  

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

     

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

     

BOOL是最早的。它的定义很简单

     

typedef int BOOL;

     

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

到目前为止,绝大多数Win32 API仍然是为C语言设计的,因此它与各种与C兼容的编程语言兼容。

Enums在编译器之间存在可移植性问题,与字节大小和位表示的差异有关。此外,直到1989年的ANSI C(又名C98),enum才被添加到C中,这是在Windows的三个版本之后(1985年为1.0,1987年为2.0,1988年为2.1),并且枚举实际上是等效的无论如何要整数。

答案 1 :(得分:2)

原因是C最初没有bool类型。根据C语言规范,任何非零整数值的计算结果为true,0的计算结果为false。 BOOL typedef是微软后来为Windows编程添加的。枚举仍将在封面下评估为0和1(或其他东西,具体取决于机器)。