我遇到了以下问题,我找不到任何具体的解释:为什么C还要提供类型定义?不定义BOOL宏与使用typedef
定义Bool类型一样好吗?
例如,#define
指令可用于创建可用作布尔类型的宏:
#define Bool int
使用称为类型定义的功能,设置布尔类型的另一种方法。
typedef int Bool;
为什么最后一种方法更受欢迎?有什么好处?
答案 0 :(得分:10)
类型定义和宏定义之间存在两个重要差异。
类型定义比宏定义更强大。特别是,数组和指针类型不能被定义为宏。假设我们尝试使用宏来定义指向整数"的指针。类型:
#define PTR_TO_INT int *
声明
PTR_TO_INT p, q, r
将成为
int * p, q, r
预处理后。不幸的是,仅 p
是一个指针; q
和r
是普通的整数变量。类型定义没有这个问题。
其次,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
被认为更加一致。