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

嵌入式学习笔记 - 头文件重复包含问题

先举一个例子:

几乎在每个.C文件中我们定义变量的时候通常需要用到 uint32_t, uint16_t, unint8_t等字符来定义变量类型,例如 uint16_t adc_value; 

显然uint16_t 这个字符并非C语言本身能够识别的字符,它属于用户在某一个文件中的一个宏定义或者类型重定义。

下图为STM32 HAL库函数中关于此变量字符的重定义文件,位于stdint.h头文件中。

通过一步步查看头文件包含关系,发现几乎每个外设模块头文件当中都递归包含了此头文件stdint.h

而main.h 中又包含了每一个外设头文件,

而且Hal库自身生成的模块初始化以及配置.H文件中又都引用了main.h文件,包括用户将要自己编写的.c, .h 文件,都会包含main.h

所以就stdio.h 头文件来说就会被引用无数次,造成重复引用相互包含以及最终引起代码文件过大的问题,但是C语言在定义头文件的时候都加了条件编译如下图,如果之前未定义过,那么整个文件会被编译,如果之前已经定义过,那么整个文件就会被舍弃不会被编译,不论你重复包含多少次永远只有一次被编译添加进代码,所以不必担心重复引用问题,话虽如此,在程序编写上最好还是要遵循一定的逻辑,这样代码的可读性逻辑性看起来更强。

相关文章:

  • React百日学习计划——Deepseek版
  • C++ 基础知识
  • Codeforces Round 997 (Div. 2)
  • JAVA实战开源项目:乐享田园系统 (Vue+SpringBoot) 附源码
  • Nesa测试网 验证者节点部署教程
  • Java后端开发day48--反射动态代理
  • Easysearch 时序数据的基于时间范围的合并策略
  • 2025年5月13日第一轮
  • 深入浅出MySQL 8.0:新特性与最佳实践
  • 2025年大一ACM训练-二分
  • TCP协议详细讲解及C++代码实例
  • 欧拉计划 Project Euler 71(有序分数)题解
  • OPC UA 协议介绍
  • Antd中Form详解:
  • volatile是什么
  • # YOLOv3:基于 PyTorch 的目标检测模型实现
  • RevIN(Reversible Instance Normalization)及其在时间序列中的应用
  • 软件测试服务公司分享:国产化适配测试的重要性和关键要素
  • paimon中批和流查看过去的快照的数据及变动的数据
  • OSCP备战-Kioptrix4详细教程
  • 排污染黑海水后用沙土覆盖黑泥?汕尾环保部门:非欲盖弥彰
  • 女高音吴睿睿“古词新唱”,穿着汉服唱唐诗宋词
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元
  • 成就彼此,照亮世界:“中欧建交50周年论坛”在沪成功举行
  • 重庆大学通报本科生发14篇SCI论文处理结果
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求