为什么 bool 只是一个宏
可能你也会感到吃惊,在C99/C11标准中,bool 的定义居然是个宏,而不是 typedef 类型!
C11 第 7.18 节中明确提到: The macro “bool” expands to _Bool.
而且 false 和 true 也是宏……不过,它下面接着有解释:
Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then
redefine the macros bool, true, and false.
可见之所以把它们定义成宏是为了让用户可以重定义,想必在C99 之前应该有不少C程序都自己定义了 bool,false 和 true 吧!而且第 7.31.9 节中说这个以后会去掉:
The ability to undefine and perhaps then redefine the macros bool, true, and false is
an obsolescent feature.
你要是感到不爽,你可以这么做:
[c]
undef bool
define bool bool
typedef _Bool bool;
[/c]