马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
精良的代码风俗和高效的范例界说在项目中饰演着至关紧张的脚色。typedef,它不光是一个语法糖,更是提拔代码质量和可维护性的利器。在这篇文章中,将为你先容typedef 4 种应用方式。
应用一、为根本数据范例界说新的范例名
用uint32_t更换unsigned int声明变量- /* 变量名重定义 */
- typedef unsigned int uint32_t;
- /* 定义一个`unsigned int`类型的变量 */
- uint32_t count = 0;
复制代码 应用二、为自界说数据范例(布局体、共用体和摆列范例)界说简便的范例名称
使用布局体界说以及声明布局体变量:- struct TagPoint
- {
- double x;
- double y;
- double z;
- };/* 定义一个三维坐标结构体 */
- /* 声明一个三维坐标点 */
- struct TagPoint point = {0, 0, 0};
复制代码 使用typedef取代布局体界说以及声明布局体变量:- typedef struct
- {
- double x;
- double y;
- double z;
- } TagPoint;/* 定义一个三维坐标结构体 */
- /* 声明一个三维坐标点 */
- TagPoint point = {0, 0, 0};
复制代码 应用三、界说数组范例
界说多个同纬度的数组:使用typedef重界说:- /* 定义数组类型 */
- typedef int arry_int_3[3];
- /* 等价于 int v[3] */
- arry_int_3 v;
复制代码 应用四、界说指针范例
1、界说数组指针范例
- /* 普通数组指针 */
- int (*arr_p)[5];//定义了一个数组指针变量arr_p,arr_p可以指向一个int a[5]的一维数组
- /* 使用typedef */
- typedef int(*Arr_P)[5];//定义一个指针类型,该类型的指针可以指向含5个int元素的一维数组
- int a[5] = {1,2,3,4,5};
- Arr_P p;//定义数组指针变量p
- p= &a;//完全合法,无警告
- p= (Arr_P)&a;//类型强制转换为Arr_P,完全合法,无警告
复制代码 2、界说函数指针范例
有一个函数原型如下:- /* 函数原型 */
- int32_t write_adc_reg(uint32_t reg_addr, uint32_t data, uint32_t chip_id);
- int32_t write_spi_reg(uint32_t reg_addr, uint32_t data, uint32_t chip_id);
复制代码 平凡界说一个函数指针指向这个函数:- /* 普通函数指针定义和使用 */
- int32_t (*write_adc_reg_p)(uint32_t, uint32_t, uint32_t);
- int32_t (*write_spi_reg_p)(uint32_t, uint32_t, uint32_t);
- /* 选择不同的写入接口 */
- write_adc_reg_p = write_adc_reg;
- write_spi_reg_p = write_spi_reg;
- /* 调用 */
- int32_t result = write_reg_p(0x10, 0x55, 0);
复制代码 使用typedef:- /* 定义函数指针类型 */
- typedef int32_t (*WriteReg_P)(uint32_t, uint32_t, uint32_t);
- /* 声明两个函数指针变量 */
- WriteReg_P write_adc_reg_p = write_adc_reg;
- WriteReg_P write_spi_reg_p = write_spi_reg;
- /* 调用 */
- int32_t adc_val = write_adc_reg_p(0x10, 0x55, 0);
复制代码 五、总结
typedef 是 C 语言中非常实用的工具,它不光能提拔代码的可读性,还便于后续维护和扩展。在嵌入式开辟中,通过公道使用 typedef,我们可以简化布局体、指针、函数指针等复杂范例的声明,让代码更清楚、表达更简便。
|