<分区>
我遇到了以下问题,但找不到任何具体解释:Why does C rother to provide type definitions ?定义 BOOL 宏不是和使用 typedef
定义 Bool 类型一样好吗?
例如,#define
指令可用于创建可用作 bool 类型的宏:
#define Bool int
还有另一种设置 bool 类型的方法,即使用称为类型定义的功能。
typedef int Bool;
为什么首选最后一种方法?有什么优势?
标签 c typedef preprocessor
<分区>
我遇到了以下问题,但找不到任何具体解释:Why does C rother to provide type definitions ?定义 BOOL 宏不是和使用 typedef
定义 Bool 类型一样好吗?
例如,#define
指令可用于创建可用作 bool 类型的宏:
#define Bool int
还有另一种设置 bool 类型的方法,即使用称为类型定义的功能。
typedef int Bool;
为什么首选最后一种方法?有什么优势?
最佳答案
类型定义和宏定义之间有两个重要的区别。
类型定义比宏定义更强大。特别是,数组和指针类型不能定义为宏。假设我们尝试使用宏来定义“指向整数的指针”类型:
#define PTR_TO_INT int *
声明
PTR_TO_INT p, q, r
会变成
int * p, q, r
预处理后。不幸的是,只有 p
是一个指针; q
和r
是普通的整数变量。类型定义没有这个问题。
其次,typedef
名称受制于与变量相同的作用域规则;在函数体内部定义的 typedef
名称在函数外部无法识别。另一方面,无论出现在何处,宏名称都会被预处理器替换。
关于c - 为什么 C 不厌其烦地提供类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369059/