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

标签 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 是一个指针; qr 是普通的整数变量。类型定义没有这个问题。

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

关于c - 为什么 C 不厌其烦地提供类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369059/

相关文章:

c - 不带 if 的队列入队函数

c - 如何在 C 中声明临时字符串以供重用?

c - scanf函数如何在C中工作?

c - 是否可以将 'walk through' 结构的内容?

c++ - 在编译时将整数部分宏和分数部分宏组合成一个新宏或 double 宏

c++ - 使用#ifdefs 进行代码选择会创建丑陋的结构 - 替代方案?

c++ - 可以在堆栈上分配 const 静态字符串吗?

c - 预声明标记结构

c - 如何理解以下有关 C 中 typedef 的代码

C 预处理器 - 根据另一个宏定义不同的宏