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

C语言文件结构

1.前言

在工作中时长用的C,但总感觉缺少了什么,在学习一些视频时看到有推荐《高质量C++/C编程指南》,虽是培训资料,但深受感悟,想将其中的东西自己过一遍,并将其中的一些知识拓展,遂有此专栏

2.正文——文件结构

每个C语言程序通常分为两个文件,一个是.h为后缀,一个是.c为后缀。

.h称为头文件,用于保护程序的声明(declaration )

.c称为定义( definition )文件,用于保存程序的实现(C++是.cpp 为后缀)

2.1版权和版本的声明

版权和版本的声明位于头文件和定义文件的开头,主要内容有:

1)文件名称,摘要

2)版本,时间,作者

3)版权,历史信息

2.2头文件的结构

头文件由三部分内容组成:

1)头文件开头处的版权和版本声明。

2)预处理块。

3)函数和类结构声明等。

头文件的一些定义有以下规则:

<1>为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。

<2> 用 #include < filename.h> 格式来引用标准库的头文件(使用时编译器会从标准库目录开始搜索)。

<3>用 #include “filename.h” 格式来引用非标准库的头文件(编译器会从用户的工作目录开始搜索)。

小建议:

1.头文件中只存放“声明”而不存放“定义”

在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

2.不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这类声明。

假设头文件名称为Test.h,头文件的结构见下图

定义文件有三部分内容:

(1)定义文件开头处的版权和版本声明(参见 2.1图示 )。

(2) 对一些头文件的引用。

(3) 程序的实现体(包括数据和代码)。

假设定义文件的名称为 Test.cpp, 定义文件的结构见下图

2.3 头文件的理解

在学习的早期,我们可以使用一个源文件来实现我们简单的学习,但在后期不断提高以及大项目中,我们是不可能把所有源码写在一个源文件中,需要很多个源文件,然后编译为一个exe进行输出,如果在每个源文件都要重复写出所有外部函数、类的完整声明,显得有点“傻”,头文件的应用让我们在写代码时更方便,ifndef/define/endif的结构可以防止一个的东西被反复定义,我们当然不可能写出

#include "Test.h"

#include "Test.h"

但却不能确保已经存在于Test.h的某个函数不被再次定义

2.4头文件的作用

防止重复定义或者便利已经在理解中有所说明,还有一个在工作中更多有所体会的作用,

头文件只放声明,而定义(实现)放在.c/.cpp中。这种分离带来的直接好处是:

  • 当源代码不便或不准向用户公布时,只需提供头文件 + 二进制库.lib/.a/.so等)。用户通过头文件中的接口声明调用库功能,无需关心内部实现细节,保护了知识产权。

  • 同时,这种方式允许分别编译与链接,提高大型项目的构建效率

http://www.gsyq.cn/news/1539844.html

相关文章:

  • Rescuezilla:你的终极系统恢复瑞士军刀,图形化克隆备份解决方案
  • 掌握 ViT(Vision Transformer)模型结构——Transformer 如何征服计算机视觉领域
  • 有实力的开袋真空吸盘品牌有哪些?聚昌利怎么样 - mypinpai
  • 猫抓浏览器插件:5分钟学会免费资源嗅探终极指南
  • Harmonyos pc实战之ArkUI 组件详解
  • 豆包2.0+扣子编程:零成本AI Bot开发实战指南
  • 端侧Qwen3轻量化部署与Skill开发实战
  • 联想超级文件全解析!跨设备传输 + 云备份一站式文件管理方案
  • Saga 分布式事务:你以为的最终一致性,其实是个慢动作炸弹
  • 华硕笔记本性能优化神器的惊艳体验:G-Helper深度评测与效率革命
  • 如何解决趋势线的滞后问题(下):LLT 实战法则与 8 年回测表现
  • ControlNet-v1-1_fp16_safetensors终极指南:精准控制AI图像生成的艺术
  • 镜像视界(浙江)科技有限公司耿文海个人简介
  • PIC单片机驱动LCD模块:从硬件连接到驱动编程的嵌入式入门实践
  • 暮云南壹府多少钱?价格与口碑综合考量 - mypinpai
  • OneReward:基于多任务人类偏好学习的统一掩码引导图像生成
  • WebRTC AV1视频编码介绍:下一代编码格式在实时通信中的应用
  • 2026年靠谱过炉治具清洗机怎么选?官方甄选与行业分析指南 - 优质品牌商家
  • mysql数据库应用②
  • 从 0 到 1 入门 Web 渗透测试 学习复盘精简总结
  • 如何快速上手MediaInfo:视频音频文件信息检测的完整教程
  • 2026年做高效送风口的靠谱公司有哪些 - 品牌排行榜
  • 业务流程自动化怎么落地?企业从0搭建完整路径(RPA+智能体全流程解析)
  • 2026年五金表面处理服务商甄选指南:靠谱的滚喷漆与电泳加工怎么选? - 优质品牌商家
  • 如何快速掌握开源计时工具LiveSplit:新手完全指南
  • 2026年工业型瓜果削皮机生产商甄选:哪些品牌值得关注? - 优质品牌商家
  • 分组聚合不是代码操作,而是业务认知手术
  • 青岛漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • GLM-5自主Agent实战:上下文切片与工具调度的工程化实现
  • SecureCRT连接Linux文件无颜色?终端颜色显示原理与配置全解析