【高质量C/C++】—— 1. 文件结构
一、版权和版本声明
版权和版本的声明位于头文件和定义文件的开头,主要内容有:
- 版权信息
- 文件名称,标识符,摘要
- 当前版本号,作者/修改者,完成日期
- 版本历史信息(版本号,作者/修改者,完成日期)
版权和版本声明示例:
/*
* xxxxxxx (c) 2022,某某某某公司
* All rights reserved.
*
* 文件名称:filename.h
* 文件标识:见配置管理计划书
* 摘 要:简要描述文本内容
*
* 当前版本:1.1
* 作 者:作者/修改者名字
* 完成日期:2022年9月10日
*
* 取代版本:1.0
* 原作者 :原作者/修改者名字
* 完成日期:2022年9月9日
*/
二、头文件结构
1. 头文件作用
- 利用头文件调用库函数功能,在很多场合源代码不便向用户公布,只需要向用户提供头文件和二进制库即可,用户只需要使用头文件中的接口声明调用库函数功能。
- 头文件能加强类型安全检查,如果某个接口被实现或被使用时,头文件声明与其不一致时会报出编译错误,方便程序员修改。
2. 头文件结构及规则
头文件由3部分内容组成:
- 头文件开头的版权和版本声明
- 预处理块
- 函数和类结构声明等
规则:
- 为了防止头文件引用,使用
ifndef/define/endif
结构产生预处理块,预定义标识符用文件名大写就行FILENAME_H
- 用
#include <filename.h>
来引用标准库头文件(编译器将从标准库目录开始搜索) - 用
#include "filename.h"
来引用非标准库头文件(编译器将从用户的工作目录开始搜索)
建议:
- 头文件中只存放“ 声明”,而不存放“ 定义”。
- 在C++的语法中,类的成员函数可以在声明的时候被定义,并自动成为内联函数。虽然书写上会方便,但是造成风格的不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多小。
- 不提倡使用全局变量,尽量不要在头文件中出现
extern int value
这类声明
//版权和版本声明... ...
#ifndef FILENAME_H //防止filename.h被重复引用
#define FILENAME_H
#include <stdio.h> //标准库函数
#include "filename.h" //非标准库函数
//全局函数声明
void Function1(... ...);
... ...
//类结构声明
class Box
{
... ...
};
#endif
三、源文件结构
源文件有三部分内容:
- 定义开头处的版权和版本声明
- 引用一些头文件
- 程序的实现体(包括数据和代码)
//版权和版本声明... ...
#include "filename.h"
//全局函数的实现体
void Function1(... ...)
{
... ...
}
... ...
//类成员函数的实现体
void Box::Draw(... ...)
{
... ...
}
四、目录结构
- 如果一个软件的头文件数目较多,通常应将头文件和源文件分别保存于不同目录,以便维护
- 例如可以将头文件保存在include目录,源文件保存在source目录(可以是多级目录)
- 如果有些头文件是私有的,它不会被用户直接引用,可以将这些私有头文件和源文件放在一个目录里