为什么C还要提供类型定义?

时间:2017-02-21 13:45:40

标签: c typedef preprocessor

我遇到了以下问题,我找不到任何具体的解释:为什么C还要提供类型定义?不定义BOOL宏与使用typedef定义Bool类型一样好吗?

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

#define Bool int

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

typedef int Bool;

为什么最后一种方法更受欢迎?有什么好处?

2 个答案:

答案 0 :(得分:10)

类型定义和宏定义之间存在两个重要差异。

类型定义比宏定义更强大。特别是,数组和指针类型不能被定义为宏。假设我们尝试使用宏来定义指向整数"的指针。类型:

  #define PTR_TO_INT int *

声明

  PTR_TO_INT p, q, r

将成为

  int * p, q, r

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

其次,typedef名称与变量的范围规则相同;函数体内定义的typedef名称在函数外部不会被识别。另一方面,宏名称在预处理器出现的任何地方都被替换。

答案 1 :(得分:8)

除了上述原因之外,还有一件事,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;

无效,因为"类型"已经定义过。

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