【C语言初阶】文件结构(头文件结构,头文件作用,头文件被重复包含的问题)

发布时间:2026/10/6 18:34:35

【C语言初阶】文件结构(头文件结构,头文件作用,头文件被重复包含的问题) 一、头文件1. 头文件的作用1. 不用在各个源文件中做重复的声明2. 组织项目结构的时候减少大型项目的维护成本修改了定义只需修改头文件中对应的声明3. 通过头文件来调用库功能。在很多场合源代码不便或不准向用户公布只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能而不必关心接口怎么实现的。编译器会从库中提取相应的代码。下文有编译和使用二进制库的详细过程4. 头文件能加强类型安全检查。如果某个接口被实现或被使用时其方式与头文件中的声明不一致编译器就会指出错误这一简单的规则能大大减轻程序员调试、改错的负担。2. 头文件的命名头文件最好与对应的源文件同名main.c不需要源文件中存放定义而头文件中存放声明3. 头文件的结构1. #pragma once或ifndef/define/endif 结构为防止头文件被重复引用4. #define宏定义5. typedef自定义类型6. 构造类型的声明如结构体枚举等7. 全局变量的声明必须加extern8. 函数的声明建议加extern注意头文件中只能写全局变量的声明不能定义全局变量否则在链接时会造成重定义错误。除非定义成static全局变量仅在当前文件可见4. extern声明1. 全局变量的声明必须带上extern。因为头文件中只能包含声明不带extern无法确定到底是声明还是定义2. 函数的声明建议带上extern。建议函数怎么定义就怎么声明包括参数类型和参数名便于理解代码。3. 为什么全局数据的链接属性默认是外部的因为多个文件之间后续一定要进行数据交互。5. 头文件被重复包含的问题1. 头文件被重复包含是下面这样的现象A文件里包含了C文件B文件里也包含了C文件然后A文件又把B文件包含了进来。这样相当于A文件包含了两次C文件这就是文件包含处理时文件被重复包含的问题。文件包含时重复包含问题有时候会带来一些问题典型的就是重定义问题会导致编译通不过。或者编译通过但是会造成编译效率降低。2. 如何防止头文件被重复多次的包含方法一方法二二、定义文件源文件1. 源文件的结构1. 对一些头文件的引用2. 全局变量的定义3. 函数的定义2. 源文件的双重保护1. static封装具体的业务流程实现了对源文件业务流程细节的保护2. 将源文件编译成静态库文件隐藏源代码的内容通过头文件来调用库功能3. static为源文件提供安全保证将源文件中实现具体细节的函数和全局变量用static修饰封装在源文件内。只将有外部需求的功能性函数暴露在头文件中。这样就实现了对源文件业务流程细节的保护4. 如何将源文件编译成静态库文件环境VS2013开发者1. 编写源文件和头文件文件公开时应在头文件中介绍函数的使用方法。2. 将项目项目包括源文件和头文件属性中的配置类型改为静态库3. 重新编译程序4. 在项目文件夹中的Debug文件夹下会产生静态库文件(.lib)该文件为二进制文件无法阅读用户1. 将静态库文件和对应的头文件放到项目文件夹下。2. 将头文件导入项目文件使用#include ***.h预处理指令引用头文件3. 使用#pragma comment(lib,***.lib)预处理指令导入静态库。4.调用在头文件中声明的函数5. 运行程序三、分享交流欢迎在评论区交流如果文章有错误还请大家指出返回专栏目录https://blog.csdn.net/zty857016148/article/details/127068555
延伸阅读

更多相关文章

2026/10/6 18:29:35

MOS管栅极电阻优化:抑制米勒效应与开关损耗

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 19:44:39

多用户多仓库进销存系统源码解析:基于uniapp的跨端库存管理方案

跑进销存这条路的人都知道,真正的痛点从来不是“做一张入库单”或者“打一张出库单”,而是当公司有多个门店、多个仓,甚至多人同时操作时,数据到底怎么算得清。前阵子我拿到一套基于uniapp的多用户多仓库进销存管理系统源码&#…

2026/10/6 19:44:39

用OpenSSH与dotfiles打造标准化Shell环境:登录配置安全一键搞定

把一套散落在不同机器上的 Shell 环境,收拢成可复用、可迁移、可安全交付的标准化方案,这件事我琢磨了很久。OpenShell 这个名字听起来像是一个开源项目,其实它更像是我给自己定的一套“终端环境建设规则”:把 SSH 登录、dotfiles…

2026/10/6 19:44:39

C++自定义字面量高级用法:编译期单位换算与字符串解析

一提到C里的自定义字面量,很多人的第一反应是“哦,不就是operator""嘛,给数值加个后缀,看着挺酷,实际上用不上”。说实话,我早几年也是这个态度。直到有一次在系统里接测量模块,满屏的…

2026/10/6 19:44:39

华为云码道代码智能体实战:从零上手到代码检视与修复

1. 从零上手华为云码道代码智能体:一个后端老兵的真实踩坑记录 第一次听说华为云码道(CodeArts)代码智能体的时候,我正被一个祖传项目折磨得够呛。那是一个跑了快六年的老系统,代码里到处是复制粘贴留下的痕迹&#xf…

2026/10/6 19:39:38

Agent-Reach 实战:用 CLI 让 AI Agent 稳定触达外部世界

Agent-Reach 这个名字第一次看到的时候,我下意识以为是某个网络代理工具,后来翻了翻社区讨论和相关的技术标签,才反应过来它指向的是另一件事:让 AI Agent 真正"够得着"外部世界的那一层能力。CLI、Python、AI Agent 这…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑