怎样理解C语言define和typedef的使用?

发布于 2022-09-07 08:03:28 字数 789 浏览 42 评论 0

/常用数据类型定义*/

#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;

根据上下文理解,我猜测下面两句意思是这样的:
typedef unsigned char unit8_t;
#define u8 unit8_t;

上一句是定义了一种unit8_t的新类型,类型其实是unsigned char的别名。
下一句是因为unit8_t太长了书写麻烦,所以定义了一个宏u8,其实还是调用的unit8_t。

那么问题来了:
1.按照程序初始化过程
#define u8 unit8_t;
typedef unsigned char unit8_t;

图中的代码是先#define后typedef的,是不是搞反了?

2.两句能不能简写成一句?

typedef unsigned char u8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

毅然前行 2022-09-14 08:03:29
  1. 宏定义define对整个文件生效,当然选择定义在头部了,它会在整个文件里面对预定义的内容进行相应替换,简单来说,变异的时候并不会检查u8uint8_t有没有定义,因为本质上来说它们并不算变量。所以,并没有和typedef unsigned char unit8_t搞反一说。
  2. 两句能不能合成一句? 答案是可以的,但是这样定义并不直观,过于精简的写法,有时候也并不是很好。
只为守护你 2022-09-14 08:03:29

实际上,这 2 个语句并没有任何直接关系。

#define 是宏定义,属于预处理阶段的东东。也就是说在预处理阶段,预处理器会把程序中的 u8 全部替换为 uint8_t
typedef 是类型定义,相当于定义了一个新类型 uint8_t,如果你在代码中使用了 uint8_t 就必须定义了它。

  1. 总的来说,你只要在使用 u8uint8_t 之前有 typedef unsigned char unit8_t 即可
  2. 你当然可以那样写
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文