为什么不将BOOL
定义为enum
,如
enum BOOL {FALSE, TRUE};
是否有任何理由必须将BOOL
指定为显式为int
(或任何其他整数类型)?
发布于 2017-07-01 18:24:27
来自雷蒙德·陈( Raymond )的博客文章:
还有更多的方式说同样的话。为什么这么多? 因为每一个都是由不同的人在不同的时间发明的,以解决不同的问题。
BOOL
是最古老的。它的定义很简单typedef int BOOL;
C编程语言使用"int“作为其布尔类型,当C是系统编程的酷语言时,Windows1.0被写回。
到目前为止,绝大多数的Win32 API都是为C语言设计的,因此它可以兼容多种与C语言兼容的编程语言。
Enum在编译器之间存在可移植性问题,这与字节大小和位表示形式的差异有关。此外,直到1989年ANSI (又名C98)才将enum
添加到C中,这是在Windows发布了三个版本(1985年为1.0,1987年为2.0,1988年为2.1 )之后,枚举实际上等同于整数。
发布于 2017-07-01 18:01:09
原因是C最初没有bool类型。根据C语言规范,任何非零积分值都计算为true,0计算为false。BOOL类型胡枝子是Microsoft后来为Windows编程而添加的。枚举仍将在封面下评估为0和1(或其他一些东西取决于机器)。
https://stackoverflow.com/questions/44863907
复制相似问题