嵌入式C语言基础:一文读懂#define与typedef的区别
在嵌入式开发中经常会用到宏定义define和typedef,它们俩在使用上有些类似,容易混淆,那么他们有什么区别呢?
二者的本质
#define是宏定义,它是一种预处理命令,在预处理的时候进行简单的文本替换操作,其表达式一般如下:
#define 标识符 字符串 /*宏定义结尾不加;*/
在预处理时会把自己定义的标识符替换为宏定义中的字符串,比如:
#define PI 3.14
这个宏定义的作用是把代码中的PI替换为3.14,在程序中遇到PI就可以把他看作3.14这个常数(前提是在宏定义的作用域内)。
typedef是C语言中的关键字,他的作用是为复杂的声明定义起一个别名,比如在STM32开发中,我们经常可以看到诸如uint32_t这类自定义数据类型,这个数据类型就是通过typedef实现的:
typedef unsigned int uint32_t; /*语句结束要加;*/
typedef更常见的是为结构等复杂数据类型起别名,以达到定义相关变量时更加方便的目的。
二者的区别
举例说明名二者的本质区别:
#define my_type1_t (int *)
typedef int* my_type2_t;
/*用两个数据类型分别定义变量*/
my_type1_t a, b;
/*替换为
int * a, b;
*/
my_type2_t c, d;
/*相当于
int * c;
int * d;
*/
其中,变量a,c,d为 int* 类型,而变量b为int型,这是因为my_type1_t并不是真正的数据类型,而是一个简单文本替代,而my_type2_t是自己定义的一个数据类型(int*的别名)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了