嵌入式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*的别名)。

posted @ 2022-01-11 22:59  Mindtechnist  阅读(24)  评论(0编辑  收藏  举报  来源