规范代码的书写从我做起,好的代码不仅利于重构,读起来也方便,写了这么久的代码一直没有好好规范一下,就像学习语文要先学习写字,规范的代码就像毛笔字,美丽又有价值,最近拜读<高质量 C++/C 编程指南>文章内容结合本书和个人思考,欢迎指正。
第一章 文件结构
- declaration (声明)
- definition (定义)
一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件
1.头文件结构
头文件包含三部分
(1)头文件开始的版权和版本声明
(2)预处理块
(3)函数和类结构声明等
假设现在有一个头文件的名称为graphics.h
// 版权和版本声明见示例 1-1,此处省略。
#ifndef GRAPHICS_H // 防止 graphics.h 被重复引用
#define GRAPHICS_H
#include <math.h> // 引用标准库的头文件 …
#include “myheader.h” // 引用非标准库的头文件 …
void Function1(…); // 全局函数声明 …
class Box // 类结构声明
{
…
};
#endif
现在来解读一下上面的代码规范。
一个头文件可能要再多个.c文件中被引用,如果多次重复引用就会造成资源的浪费,甚至说会有一些bug。
【规则】为了防止头文件被重复使用应该用 ifdef/define/endif处理代码块
我们再写c语言程序的时候,通常会自己定义.h头文件,自己定义的.h头文件并不在本地的标准库内,编译器搜索本地的库时搜索不到我们自己编写的头文件.
用 #include <filename.h> 格式来引用标准库的头文件(编译器将 从标准库目录开始搜索)。
用 #include “filename.h” 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索)。
文章还给出了两个建议
头文件中只存放“声明”而不存放“定义”
不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这
类声明。
2.定义文件的结构
- 对一些头文件的引用
- 程序的实现题 包括(数据和代码)
假设现在有一个定义文件graphics.cpp
#include “graphics.h” // 引用头文件 …
// 全局函数的实现体
void Function1(…)
{
…
}
// 类成员函数的实现体
void Box::Draw(…)
{
… }
头文件的作用
以下为书本原内容
早期的编程语言如 Basic、Fortran 没有头文件的概念,C++/C 语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件的作用略作解释:
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担
目录结构
如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分
别保存于不同的目录,以便于维护。
例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级
目录)。
如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声
明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。