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

如何在C语言项目中优雅地使用结构体

在嵌入式开发中,结构体是一种非常重要的数据组织方式,它可以帮助我们更好地管理复杂的数据。今天,我将通过一个具体的例子,展示如何在C语言项目中定义结构体、在 .c文件 中实例化结构体变量,并通过 extern 关键字在其他文件中访问这些变量。这个技巧在多文件项目中非常实用,可以提高代码的可读性和可维护性。

1、定义结构体

假设我们开发一个脉冲测量输入捕获模块,需要记录捕获的相关信息。我们可以在 .h文件 中定义一个定时器输入捕获结构体。

// GeneralTimer.h文件
#ifndef __GENERALTIMER_H
#define __GENERALTIMER_H

// 定时器输入捕获用户自定义变量结构体声明
typedef struct
{   
	uint8_t   Capture_FinishFlag;   // 捕获结束标志位
	uint8_t   Capture_StartFlag;    // 捕获开始标志位
	uint16_t  Capture_CcrValue;     // 捕获寄存器的值
	uint16_t  Capture_Period;       // 自动重装载寄存器更新标志 
}TIM_ICUserValueTypeDef;
#endif /* __GENERALTIMER_H */

在这个文件中,我们定义了一个名为 TIM_ICUserValueTypeDef 的结构体,它包含四个字段:捕获结束标志位、捕获开始标志位、捕获寄存器的值和自动重装载寄存器更新标志 。

2、在 .c文件 中声明结构体变量

接下来,在 .c文件 中,我们实例化这个结构体变量,并初始化它。

// GeneralTimer.c文件
#include "GeneralTimer.h"

// 定时器输入捕获用户自定义变量结构体定义
TIM_ICUserValueTypeDef TIM_ICUserValueStructure = {
	.Capture_FinishFlag = 0,
	.Capture_StartFlag = 0,
	.Capture_CcrValue = 0,
	.Capture_Period = 0
};

这里,我们定义了一个名为 TIM_ICUserValueStructure 的全局变量,并初始化了它的各个字段。

3、使用 extern 关键字在其他文件中访问结构体变量

为了让其他文件能够访问这个全局变量,我们需要在 .h文件 中使用 extern 关键字声明它。

// GeneralTimer.h文件(更新)
#ifndef __GENERALTIMER_H
#define __GENERALTIMER_H

// 定时器输入捕获用户自定义变量结构体声明
typedef struct
{   
	uint8_t   Capture_FinishFlag;   // 捕获结束标志位
	uint8_t   Capture_StartFlag;    // 捕获开始标志位
	uint16_t  Capture_CcrValue;     // 捕获寄存器的值
	uint16_t  Capture_Period;       // 自动重装载寄存器更新标志 
}TIM_ICUserValueTypeDef;

// 声明全局变量
extern TIM_ICUserValueTypeDef TIM_ICUserValueStructure;

#endif /* __GENERALTIMER_H */

在其他文件中,只要包含 GeneralTimer.h,就可以访问 TIM_ICUserValueStructure 变量了。

// main.c文件
#include "GeneralTimer.h"
#include "usart.h"

int main(void)
{
	USART_Config();
	
	printf("\r\n Capture_FinishFlag: %d \n", TIM_ICUserValueStructure.Capture_FinishFlag);
	printf("\r\n Capture_StartFlag: %d \n", TIM_ICUserValueStructure.Capture_StartFlag);
	printf("\r\n Capture_CcrValue: %d \n", TIM_ICUserValueStructure.Capture_CcrValue);
	printf("\r\n Capture_Period: %d \n", TIM_ICUserValueStructure.Capture_Period);
	
	while(1)
	{
		
	}
}

4、总结

通过这种方式,我们可以在 .h文件 中定义结构体,然后在 .c文件 中实例化它,并通过 extern 关键字在其他文件中访问它。

这种方法的优点是:

  • 模块化:结构体的定义和实现分离,便于维护和扩展。

  • 全局访问:通过 extern 关键字,可以在多个文件中共享同一个变量,避免重复定义。

  • 清晰的接口:通过 .h文件 声明,其他开发者可以清楚地知道哪些变量是全局可用的。

原文地址:https://blog.csdn.net/CSDN_PBB/article/details/145404836
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/527879.html

相关文章:

  • VirtualBox:跨磁盘导入已存的vdi磁盘文件顺便测试冷迁移
  • MySQL 导入数据
  • DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”
  • Win11 Windows 禁用右键折叠菜单
  • 大数据挖掘--两个角度理解相似度计算理论
  • 文献阅读 250131-Global Carbon Budget 2023(1)
  • 如何成为一名 Python 全栈工程师攻略
  • 加一(66)
  • CSS 中调整元素大小的全面指南
  • 人工智能|基本概念|人工智能相关重要概念---AI定义以及模型相关知识
  • 【Nacos】配置中心
  • Rust 条件语句
  • 仿真设计|基于51单片机的景区人数管理系统仿真
  • android安卓用Rime
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.29 内存奥秘:跨语言内存管理实战
  • 智能码二维码的成本效益分析
  • MySQL数据库(二)- SQL
  • 算法随笔_33: 132模式
  • deepseek核心技术:MLA架构-多头潜在注意力
  • python 使用Whisper模型进行语音翻译