当前位置: 首页 > 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.jsqmd.com/news/1068947/

相关文章:

  • 三款巨好用的workbuddy连接器,一句话查客户情况、生成话术知识库,比skill还好用
  • 【AI原生思维链工程化白皮书】:2026奇点大会首发CoT落地框架、5大工业级验证范式与3类失效熔断机制
  • 连接第二台手机提示:cannot connect to 192.168.1.130:5555: 由于目标计算机积极拒绝,无法连接。 (10061)
  • 香港金库、Vault ID 与链上 NFT:Relique 如何建立资产信任?
  • librime-lua:用Lua脚本为RIME输入法注入无限可能
  • 风丘助力混合动力汽车工况测试:精准采集整车信号解决方案
  • 如何快速部署Carnice-V2-27B:构建高效AI智能体的完整指南
  • 我用手工写标书和AI辅助各做了一周,整理出这份真实对比
  • 终极指南:98个公共Tracker服务器如何让你的BT下载速度翻倍?[特殊字符]
  • 别踩 2026年自定义词库转写的坑:我实操总结的新手实用经验
  • 共享内存操作梳理
  • 5个技巧教你用Gitea Actions实现自动化部署流水线,告别手动部署烦恼
  • 【仅限首批注册开发者】:奇点大会Plugin Architecture工作坊未公开的12个生产级陷阱与对应eBPF监控脚本(有效期至2025.12.31)
  • 进程间通信与匿名管道详解
  • SITS 2026 AI Agent Pipeline设计全链路拆解,深度解析动态意图路由、可信度熔断与跨模态编排协议
  • Java数组深度解析:从基础到架构的实战指南(上)
  • 计算机毕业设计之高校教室场馆资产管理系统
  • 对于Prompt的思考:从“手写”到提示词采样、A/B Test 与自动化评测
  • 2026腾讯地图多场景技术方案科学选型指南
  • OmniShotCut实战:C++/ONNX部署SOTA镜头检测,一键导出PR时间线(附开源JSX脚本)
  • 2026年COR,核密度估计增强优化:一种统计学习策略
  • 【图像分割】基于遗传算法的进化聚类技术对彩色图像进行分割附Matlab代码
  • 6款主流幼儿英语启蒙app测评,孰优孰劣一目了然
  • htmlwidgets架构优化:提升R可视化组件渲染效率的实施方法论
  • 选址避坑指南:企业如何从海量办公楼出租公司中精准锁定靠谱服务商
  • MySQL数据库迁移方案怎么选?4种方案对比+大数据量迁移避坑实战
  • 乐迪信息:智慧港口船舶AI综合感知系统(集成算法+防爆摄像机)
  • 运行 OpenClaw 的安全治理:身份、隔离与运行时风险
  • 欧盟GMP对AI大模型划定红线,详解药企AI生存法则
  • 自己买共享充电宝到底划不划算