高质量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配对,圈定条件范围。


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