在嵌入式开发中经常会用到宏定义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*的别名)。