当前位置: 首页 > news >正文

typedef用法

良好的代码习惯高效的类型定义在项目中扮演着至关重要的角色。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};

应用三、定义数组类型

定义多个同纬度的数组:

int v[3];
int i[3];

使用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,我们可以简化结构体、指针、函数指针等复杂类型的声明,让代码更清晰、表达更简洁。

http://www.jsqmd.com/news/437148/

相关文章:

  • Eureka服务注册中心在大数据平台中的最佳实践
  • 2026年3月冒菜加盟公司推荐,开店成功率高与口碑俱佳品牌 - 品牌鉴赏师
  • 大模型是怎么思考的?揭秘 AI 的大脑工作原理
  • 2026年3月高温伺服电机厂家推荐,高温工况精密伺服控制厂家 - 品牌鉴赏师
  • 2026年3月娜塔莉绿化苗木基地权威推荐,种植实力与市场口碑深度解析 - 品牌鉴赏师
  • 2026年3月鸡爪槭苗木批发基地推荐,精品苗木与景观工程专用商家 - 品牌鉴赏师
  • LVGL 提高帧率
  • 国产32位微控制器MCU怎么选?2026年主流厂商推荐榜单与测评指南
  • 为什么银在2026年表现优于黄金?现在投资银还晚吗?
  • GUI-Guider 更新screen_1_label_1标签
  • LVGL检测页面是否关闭 标签是否可见防止更新标签卡死
  • HR人事管理系统哪家好?深度拆解:为什么“可定制+双模式+本地服务”才是企业降本增效的终极答案?
  • 4060要怎么训练一个可以不用api画solidworks的ai
  • .net有什么类库加载图片为窗口背景,放大图片不模糊
  • 跨行转岗网络安全有多香?薪资翻倍!45天逆袭9K+
  • 北京高端购物中心/商场美陈设计优选榜:3家创意公司力荐
  • 计算机毕业设计springboot汽车美容服务管理系统 基于SpringBoot的汽车养护服务综合管理平台设计与实现 基于SpringBoot的智慧车美门店运营系统开发与应用
  • 2000-2025年地级市低空经济企业数据
  • 2026年3月空调冷媒检漏仪厂家推荐,空调制冷系统专用检漏厂家 - 品牌鉴赏师
  • 2026年3月便携式测氢仪厂家推荐,便携现场检测与快速响应厂家 - 品牌鉴赏师
  • 一文带你深入了解静态成员变量/函数 在类中的应用
  • 2026年3月合金管厂家推荐:行业测评与选择指南 - 品牌鉴赏师
  • 政府信息公开监督保障方案怎么写,有哪些内容
  • Pandas数据处理(1): 数据的导入导出与缺失值处理
  • 空实辩证:以指月之手的理论自省
  • Spring Boot 参数验证
  • RAG-01-假设性问题索引
  • 2026年3月非标定制焊管厂家推荐,按需定制与特殊规格实力厂家 - 品牌鉴赏师
  • 2026年3月饮料灌装机厂家推荐,食品级卫生与高速灌装厂家实力 - 品牌鉴赏师
  • 深度学习的补充:神经网络处理回归困难(人脸关键点识别)自然语言处理的介绍及深度学习用于自然语言处理