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

C语言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/26023/

相关文章:

  • 美客多接口协议学习
  • Python 模块sys详解
  • 2025-10-29 早报新闻
  • 请问
  • 2024 暑期模拟赛 #5
  • Nordic无线开发---nRF Connect SDK 3.0更新版的安装入门介绍
  • 关于 google 登陆的一些奇妙技巧
  • 移位寄存器 蓝色 与 粉红色 有什么区别
  • 第9天(中等题 滑动窗口)
  • Palantir Ontology 技术深度解析:化繁为简,连接数据与决策的数字孪生
  • CF1196F K-th Path
  • 转换FastText训练数据格式到Parquet(Polars,KIMI)
  • PlantAssistant-VUE属性数据
  • 由 Mybatis 源码畅谈软件设计(四):动态 SQL 执行流程
  • 10.29(续)
  • DicomObjects .NET 8.48.231.0 - 实践
  • 2025.10.29__jyu每日一题题解
  • CSP-J/S2024 游记
  • 以《出师表》作为例子,对比通用分块和父子分块的区别
  • 苏联套娃
  • DP 状态设计
  • winget不可用,一直转圈,文字变蓝色
  • Uno Platform 6.3 发布:支持 .NET 10 预览版并兼容 VS 2026
  • 线段树入门 - idle
  • 2025年10月临江鳝丝店推荐:五家口碑店铺综合对比排行
  • 文档抽取技术在智能合同对比系统中的应用与优势分析
  • 2025年10月临江鳝丝店对比报告:详析五家店铺特色与差异
  • vs2022(2026)离线安装失败的问题解决
  • 家训
  • 2025年10月临江鳝丝店推荐榜:五家口碑店铺深度对比与选择指南