为什么C99的bool是宏而不是typedef?

时间:2018-03-14 12:26:37

标签: boolean c99 stdbool

为什么C99中引入的布尔类型支持使用预处理器而不是语言自己的工具?具体来说,为什么我们有:

#define bool    _Bool
#define true    1
#define false   0

<stdbool.h>而不是:

typedef _Bool bool;
enum { false = 0, true = 1 };

我认为枚举可以被视为品味问题。但是 - 为什么没有typedef?

1 个答案:

答案 0 :(得分:1)

从C11规范的第7.18 / 3节开始:

  

其余三个宏适用于 #if 预处理指令。

规范列出了truefalse__bool_true_false_are_defined

规范还继续声明(在7.18 / 4中)程序可能未定义booltruefalse宏。

关于取消定义它们的最后一部分是(我猜),因为在发布C99时使用了很多遗留代码,使用了它们自己的定义以及布尔类型和值的变体。所以它不会使现有代码无效。 因此它们是宏,因此它们可以在预处理器条件下使用,因此程序可能无法定义它们。