为什么 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
是一个指针; q
和r
是普通的整数变量。类型定义没有这个问题。
其次,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" 的别名,在这方面被认为更加一致。
我遇到了以下问题,我找不到任何具体的解释: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
是一个指针; q
和r
是普通的整数变量。类型定义没有这个问题。
其次,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" 的别名,在这方面被认为更加一致。