当前位置: 首页 > 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语言在定义头文件的时候都加了条件编译如下图,如果之前未定义过,那么整个文件会被编译,如果之前已经定义过,那么整个文件就会被舍弃不会被编译,不论你重复包含多少次永远只有一次被编译添加进代码,所以不必担心重复引用问题,话虽如此,在程序编写上最好还是要遵循一定的逻辑,这样代码的可读性逻辑性看起来更强。

http://www.dtcms.com/a/189117.html

相关文章:

  • 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详细教程
  • Python+1688 API 开发教程:实现商品实时数据采集的完整接入方案
  • Conda在powershell终端中无法使用conda activate命令
  • React百日学习计划-Grok3
  • 如何学习VBA_3.3.3 VBA程序写好后,如何进行调试,直到程序运行
  • 数据结构—(链表,栈,队列,树)
  • 重生之我是CSDN大佬
  • 在VirtualBox中安装虚拟机后不能全屏显示的问题及解决办法
  • 从零实现一个高并发内存池 - 1
  • [ctfshow web入门] web72
  • Linux精确列出非法 UTF-8 字符的路径或文件名