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

高质量C++/ C编程指南-文件结构

前言

本博主从前觉得代码管理软件质量这种东西从来没有放在心上,自己能把项目做出来,能看懂自己写的代码就好了;直到入职一家公司后,做的第一件事情就是被公司软件经理“ 坤哥 ”安排学习完这篇文档。初次学习这篇文档"高质量C++/ C编程指南 "才知道自己最先的感受是惊慌,我以前捏造的代码程序尽量都是毛病,这些毛病全是致命的;所以在学习这篇文档的同时也在用学习笔记去记录自己的对文档的理解;希望我的这份学习笔记可以帮助到大家一下进步成长!
学习文档为:"高质量C++/ C编程指南 "【作者 林锐】

高质量C++/ C编程指南-文件结构

每个C++/C语言程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现,称为定义(definition)文件。
C++/C程序的头文件以“ .h ”为后缀,C程序的定义文件以“ .c ”为后缀,C++程序的定义文件通常以" .cpp "为后缀(也有一些系统以“ .cc ”或“ .cxx ”为后缀)。

1.1 版权和版本的声明

版权和版本的声明位于头文件和定义文件的开头(参见示例1.1),主要内容有:
(1)版权信息
(2)文件名称,标识符,摘要。
(3)当前版本号,作者/修改者,完成日期。
(4)版本历史信息。

示例1-1版权和版本的声明


1.2头文件的结构

(1)头文件开头出的版权和版本声明(图片不展示)
(2)预处理块;
(3)函数和类结构声明等;
假设头文件名称为app_config.h,头文件的结构参见示例1-2

【规则1】为防止头文件被重复引用,应当用#ifndef/#define/endif结构产生预处理块;
【规则2】用#include <stdio.h>格式来引用标志库的头文件(编译器将从标准库目录开始搜索)。
【规则3】用#include "stdio.h" 格式来引用非标准库得头文件(编译器将从用户工作目录开始搜索)
【建议1】头文件中只存放“ 声明 ”而不存放“ 定义 ”
【建议2】不提倡使用全局变量,尽量不要在头文件中出现现象extern int value 这类声明

示例1-2

三个预处理指令的核心作用:头文件保护
1、#ifndef 作用:如果这个宏没有定义,就执行下面的代码,如果已经定义,则直接跳转到#endif
2、#deine 作用:定义一个宏名,在这里的作用不是替换文本,而是打标记。第一次进来时定义它,第二次进来时因为它已存在,就跳过中间内容
3、#endif 作用:到此结束。和#ifndef配对,圈定条件范围。


1.3定义文件的结构

(1)定义文件开头出的版权和版本声明(图片不展示)
(2)对一些头文件的引用
(3)程序的实现体(包括数据和代码)
假设定义文件的名称为“ app_config.c ”,定义文件的结构参见示例


1.4头文件的作用

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)想用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调动库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员的调试,改错负担。


1.5目录结构

如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。
例如可将头文件保存于include 目录,将定义文件保存于source目录(可以是多级目录)。
如果某些头文件是私用的,它不会被用户的程序直接引用,则没有必要公开其 “ 声明 ”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。


总结心得

头文件规则
【规则1】为防止头文件被重复引用,应当用#ifndef/#define/endif结构产生预处理块;
【规则2】用#include <stdio.h>格式来引用标志库的头文件(编译器将从标准库目录开始搜索)。
【规则3】用#include "stdio.h" 格式来引用非标准库得头文件(编译器将从用户工作目录开始搜索)
【建议1】头文件中只存放“ 声明 ”而不存放“ 定义 ”
【建议2】不提倡使用全局变量,尽量不要在头文件中出现现象extern int value 这类声明

三个预处理指令的核心作用:头文件保护
1、#ifndef 作用:如果这个宏没有定义,就执行下面的代码,如果已经定义,则直接跳转到#endif
2、#deine 作用:定义一个宏名,在这里的作用不是替换文本,而是打标记。第一次进来时定义它,第二次进来时因为它已存在,就跳过中间内容
3、#endif 作用:到此结束。和#ifndef配对,圈定条件范围。


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

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

相关文章:

  • 【AI原生思维链工程化白皮书】:2026奇点大会首发CoT落地框架、5大工业级验证范式与3类失效熔断机制
  • 连接第二台手机提示:cannot connect to 192.168.1.130:5555: 由于目标计算机积极拒绝,无法连接。 (10061)
  • 我用手工写标书和AI辅助各做了一周,整理出这份真实对比
  • Java数组深度解析:从基础到架构的实战指南(上)
  • OmniShotCut实战:C++/ONNX部署SOTA镜头检测,一键导出PR时间线(附开源JSX脚本)
  • 自己买共享充电宝到底划不划算
  • 欧盟GMP对AI大模型划定红线,详解药企AI生存法则
  • 高考志愿填报:大数据相关专业到底怎么选?
  • 2026年全铝大门选购指南:哪家工艺更靠谱
  • 用SymPy自动计算抛物线求根、判别式与顶点
  • 一行代码看懂 Linux 内核的时间转换:__month_to_secs 逐行拆解
  • 2026金九银十Java八股文面试题汇总(附答案·全栈覆盖)
  • 多色流式无串扰!647细胞凋亡检测试剂盒
  • 浙大、腾讯团队提出 JAVEdit 相关成果,填补自然语言驱动联合音视频编辑空白
  • 怎样科学评估营销活动真实声量?智能清洗假粉留言的实用指南
  • 幽默,一个 Github 名字叫“马尾辫”,但是他给你省了 80% 的 token
  • 腾讯地图AI功能实测与开发避坑指南
  • MyFramework:异步加载回调为什么要先转移再执行
  • Mistral AI:企业控制 AI 层的新希望,能否在巨头林立的市场突围?
  • Spring AI MCP 工具调用测试文章
  • 奈飞Netflix高级会员解锁版破解版 全网同步 终身免费使用观看
  • 路侧单元被劫持,交叉路口的车全部收到了假信号——V2X路侧安全该怎么做?
  • AI原生状态管理不是框架选择题,而是数学建模题(2026奇点大会论文集第8章精要速读版)
  • AI原生预训练模型选型避坑手册(SITS 2026实测版):5个被厂商隐瞒的关键衰减指标曝光
  • 别再堆模型了!SITS 2026定义的“最小可行融合单元”是什么?——1个架构图+4个验证checklist
  • Hermes Agent 技能进化系统拆解:Skill 的元数据结构、自注册加载与退化机制 [07]
  • 为什么你的MoCo在SITS 2026测试集上AUC暴跌?20年CV老兵拆解:时序负样本采样偏差的3层因果链与实时校准工具包
  • 2026串口屏行业观察
  • 软件许可证总是不够用,问题到底出在哪
  • 从本地到云端,ROCm 7.x 环境迁移的差异化配置要点