1

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

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

<stdbool.h>而不是:

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

我想枚举可以看作是一个品味问题。但是 - 为什么没有 typedef?

4

1 回答 1

2

从 C11 规范的第 7.18/3 节:

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

规范列出truefalse__bool_true_false_are_defined

该规范还继续声明(在 7.18/4 中),bool程序可能未定义true和宏。false

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

于 2018-03-14T14:05:17.257 回答