为什么C99中引入的布尔类型支持使用预处理器而不是语言自己的工具?具体来说,为什么我们有:
#define bool _Bool
#define true 1
#define false 0
在<stdbool.h>
而不是:
typedef _Bool bool;
enum { false = 0, true = 1 };
我认为枚举可以被视为品味问题。但是 - 为什么没有typedef?
答案 0 :(得分:1)
从C11规范的第7.18 / 3节开始:
其余三个宏适用于
#if
预处理指令。
规范列出了true
,false
和__bool_true_false_are_defined
。
规范还继续声明(在7.18 / 4中)程序可能未定义bool
,true
和false
宏。
关于取消定义它们的最后一部分是(我猜),因为在发布C99时使用了很多遗留代码,使用了它们自己的定义以及布尔类型和值的变体。所以它不会使现有代码无效。 因此它们是宏,因此它们可以在预处理器条件下使用,因此程序可能无法定义它们。