【发布时间】:2017-07-11 04:16:49
【问题描述】:
我遇到了以下问题,我找不到任何具体解释:为什么 C 会费心提供类型定义?定义 BOOL 宏不是和使用 typedef 定义 Bool 类型一样好吗?
例如,#define 指令可用于创建可用作布尔类型的宏:
#define Bool int
还有另一种设置布尔类型的方法,使用称为类型定义的功能。
typedef int Bool;
为什么首选最后一种方法?有什么优势?
【问题讨论】:
-
C 中没有
BOOL宏,也没有内置的bool类型。但是,应该使用布尔类型_Bool代替自制软件typedefs 或宏。关于您的问题:这是不首选且强烈建议不要这样做。 -
请注意,C 的
_Bool在许多功能属性上与 OP 的typedef int Bool ;的结果不同。Bool这里不是展示 OP 的typedef与#define问题的好例子。 -
@chux:它们不同的简单示例:
_Bool b = 5; printf(%d", b);。试试这个typedefedint。 -
_Bool 可能是一个不好的例子,因为它是一个带有 typedef 无法实现的语义的内置函数。
-
@Rizzo C 有一个真正的 _Bool。它与任何其他整数类型的不同之处在于,存储在其中的任何非零值都存储为 1,而存储在其中的零则存储为零。你不能用 typedef 得到它(溢出和缩小截断会妨碍你)。这可能就是你的问题的挑剔者(否则,这是一个非常好的问题,IMO)。
标签: c typedef preprocessor