为什么 C 不厌其烦地提供类型定义?

Why does C bother to provide type definitions?

我遇到了以下问题,我找不到任何具体的解释:Why does C rother to provide type definitions ?定义 BOOL 宏不是和使用 typedef 定义 Bool 类型一样好吗?

例如,#define指令可用于创建可用作布尔类型的宏:

#define Bool int

还有另一种设置布尔类型的方法,即使用称为类型定义的功能。

typedef int Bool;

为什么首选最后一种方法?有什么优势?

类型定义和宏定义之间有两个重要区别。

类型定义比宏定义更强大。特别是,数组和指针类型不能定义为宏。假设我们尝试使用宏来定义一个"pointer to integer"类型:

  #define PTR_TO_INT int *

宣言

  PTR_TO_INT p, q, r

会变成

  int * p, q, r

预处理后。不幸的是,只有 p是一个指针; qr是普通的整数变量。类型定义没有这个问题。

其次,typedef名称与变量遵循相同的作用域规则;在函数体内部定义的 typedef 名称在函数外部无法识别。另一方面,无论出现在何处,宏名称都会被预处理器替换。

除了上述原因外,还有一点,MACRO可以取消定义和重新定义,但typedef则不行。所以,从一个角度来看,typedef明确

例如

#define MAX 5

//some use of MAX

#undef MAX
#define MAX 10

// some more use of MAX

完全有效,但尝试做类似

的事情
typedef int into;

///something....

typedef char into;

无效,因为之前已经定义了 "type"。

因此,typedef 创建 "type" 的别名,在这方面被认为更加一致。