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