代码规范:头文件规范

简介: 用以在实验过程和运维过程里遇到突发情况时即时回退研发交付时,运维和甲方能够拿到成熟的产品项目新人接入时能够快速上手

1.1 版本和版本声明

1.作用:形成版本跟踪和版本管控,

  1. 用以在实验过程和运维过程里遇到突发情况时即时回退
  2. 研发交付时,运维和甲方能够拿到成熟的产品项目
  3. 新人接入时能够快速上手
  4. 管理者在项目跟踪和项目改造时能够及时查看开发进度。
  5. 后续待添加

2.包含内容:

(1)版权信息。

(2)文件名称,标识符,摘要。

(3)当前版本号,作者/修改者,完成日期。

(4)版本历史信息。

样例示意:示例 1-1:

/*
* Copyright (c) 2022,北京象元气象观测技术研究院
* All rights reserved.
*
* 文件名称:XYHead.h
* 文件标识:见配置管理计划书
* 摘 要:进行公共的三方库的集中管理
*
* 当前版本:1.1
* 作 者:Zry
* 完成日期:2022年4月30日
*
* 取代版本:1.0
* 原作者 :Zry
* 完成日期:2022年4月29日
*/

1.2 头文件的结构

  1. 本节目的:
  2. 规范代码风格
  3. 便于他人阅读

2.头文件由三部分内容组成:

  1. 头文件开头处的版权和版本声明(参见示例 1-1)。
  2. 预处理块。
  3. 函数和类结构声明等

3.头文件书写规则建议:

  1. 【规则 1-2-1】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。
  2. 【规则 1-2-2】用 #include  格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
  3. 【规则 1-2-3】用 #include "filename.h" 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
  4. 【建议 1-2-1】头文件中只存放“声明”而不存放“定义”在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。
  5. 【建议 1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这类声明。
  6. 【建议 1-2-3】如果有自定义的结构体,请先在类前集中定义
  7. 【建议 1-2-4】使用//=========结构体定义开始===========``//=========结构体定义结束===========的注释来规划整体的代码分块

代码示例:

/*
* Copyright (c) 2022,北京象元气象观测技术研究院
* All rights reserved.
*
* 文件名称:XYHead.h
* 文件标识:见配置管理计划书
* 摘 要:进行公共的三方库的集中管理
*
* 当前版本:1.1
* 作 者:Zry
* 完成日期:2022年4月30日
*
* 取代版本:1.0
* 原作者 :Zry
* 完成日期:2022年4月29日
*/
#ifndef XYHEAD_H // 防止 XYHead.h 被重复引用
#define XYHEAD_H
#include <math.h> //库文件引用和预处理块声明间隔开一行
// 引用标准库的头文件
#include “myheader.h” // 引用非标准库的头文件
//=============结构体定义开始=======================
/**
* 基础的消息结构体
*/
struct MsgData
{
  int iMsgId;
  char chMsgTest;
};
//=============结构体定义结束=======================
//=============类定义开始=======================
class Box // 类结构声明
{
};
//=============类定义结束=======================
//=============函数声明开始=======================
void Function1(…); // 全局函数声明
//=============函数声明结束=======================
#endif

1.3 定义文件的结构

定义文件有三部分内容:

定义文件开头处的版权和版本声明(参见示例 1-1)。

对一些头文件的引用。

程序的实现体(包括数据和代码)。

假设定义文件的名称为 XYworkMain.cpp,定义文件的结构参见示例


// 版权和版本声明见示例 1-1,此处省略。
#include “XYhead.h” // 引用头文件
// 全局函数的实现体
void Function1(…)
{
}
// 类成员函数的实现体
void Box::Draw(…)
{
}

建议:

  1. 如果是执行函数,使用bool类型作为返回值,告诉调用者执行结果
  2. 如果是重要函数,使用int类型作为返回值,告诉调用者错误种类
  3. 不要在代码中出现常量的比较,使用到的常量应使用宏的方式在头文件中集中定义。

1.4 头文件的作用

不必公布源码,提升保密性和安全性

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只

要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库


功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。


加快开发效率

(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件

中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错


的负担


1.5 目录结构

如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分


别保存于不同的目录,以便于维护。


例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级


目录)。


如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声


明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。


举例说明:

目录结构:

Src
├── OpInclude
│   └── OpBase
└── OpModule
    ├── Algorithm
    ├── Connect
    └── FileSend

将代码放在Src下,公有的库文件调用写在OpInclude中,OpBase中写入框架设计代码


OpModule中写入业务功能 模块的代码。


从而实现了模块化的架构设计,当新增功能业务需求时,只需要改动添加模块部分,不需要整体重构,同时也将整体业务进行了拆分实现了精细化管理管理的条件。## 1.1 版本和版本声明


作用:形成版本跟踪和版本管控,

  1. 用以在实验过程和运维过程里遇到突发情况时即时回退
  2. 研发交付时,运维和甲方能够拿到成熟的产品项目
  3. 新人接入时能够快速上手
  4. 管理者在项目跟踪和项目改造时能够及时查看开发进度。

后续待添加

包含内容:

(1)版权信息。

(2)文件名称,标识符,摘要。

(3)当前版本号,作者/修改者,完成日期。

(4)版本历史信息。

样例示意:示例 1-1:

/*
* Copyright (c) 2022,北京象元气象观测技术研究院
* All rights reserved.
*
* 文件名称:XYHead.h
* 文件标识:见配置管理计划书
* 摘 要:进行公共的三方库的集中管理
*
* 当前版本:1.1
* 作 者:Zry
* 完成日期:2022年4月30日
*
* 取代版本:1.0
* 原作者 :Zry
* 完成日期:2022年4月29日
*/

1.2 头文件的结构

本节目的:

规范代码风格

便于他人阅读

头文件由三部分内容组成:

头文件开头处的版权和版本声明(参见示例 1-1)。

预处理块。

函数和类结构声明等

头文件书写规则建议:

【规则 1-2-1】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。

【规则 1-2-2】用 #include  格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则 1-2-3】用 #include "filename.h" 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。

【建议 1-2-1】头文件中只存放“声明”而不存放“定义”在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

【建议 1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这类声明。

【建议 1-2-3】如果有自定义的结构体,请先在类前集中定义

【建议 1-2-4】使用//=========结构体定义开始===========``//=========结构体定义结束===========的注释来规划整体的代码分块

代码示例:

/*
* Copyright (c) 2022,北京象元气象观测技术研究院
* All rights reserved.
*
* 文件名称:XYHead.h
* 文件标识:见配置管理计划书
* 摘 要:进行公共的三方库的集中管理
*
* 当前版本:1.1
* 作 者:Zry
* 完成日期:2022年4月30日
*
* 取代版本:1.0
* 原作者 :Zry
* 完成日期:2022年4月29日
*/
#ifndef XYHEAD_H // 防止 XYHead.h 被重复引用
#define XYHEAD_H
#include <math.h> //库文件引用和预处理块声明间隔开一行
// 引用标准库的头文件
#include “myheader.h” // 引用非标准库的头文件
//=============结构体定义开始=======================
/**
* 基础的消息结构体
*/
struct MsgData
{
  int iMsgId;
  char chMsgTest;
};
//=============结构体定义结束=======================
//=============类定义开始=======================
class Box // 类结构声明
{
};
//=============类定义结束=======================
//=============函数声明开始=======================
void Function1(…); // 全局函数声明
//=============函数声明结束=======================
#endif

1.3 定义文件的结构

定义文件有三部分内容:

定义文件开头处的版权和版本声明(参见示例 1-1)。

对一些头文件的引用。

程序的实现体(包括数据和代码)。

假设定义文件的名称为 XYworkMain.cpp,定义文件的结构参见示例


// 版权和版本声明见示例 1-1,此处省略。
#include “XYhead.h” // 引用头文件
// 全局函数的实现体
void Function1(…)
{
}
// 类成员函数的实现体
void Box::Draw(…)
{
}

建议:

如果是执行函数,使用bool类型作为返回值,告诉调用者执行结果

如果是重要函数,使用int类型作为返回值,告诉调用者错误种类

不要在代码中出现常量的比较,使用到的常量应使用宏的方式在头文件中集中定义。

1.4 头文件的作用

不必公布源码,提升保密性和安全性

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只

要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库


功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。


加快开发效率

(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件

中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错


的负担


1.5 目录结构

如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分


别保存于不同的目录,以便于维护。


例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级


目录)。


如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声


明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。


举例说明:

目录结构:

Src
├── OpInclude
│   └── OpBase
└── OpModule
    ├── Algorithm
    ├── Connect
    └── FileSend

将代码放在Src下,公有的库文件调用写在OpInclude中,OpBase中写入框架设计代码


OpModule中写入业务功能 模块的代码。


从而实现了模块化的架构设计,当新增功能业务需求时,只需要改动添加模块部分,不需要整体重构,同时也将整体业务进行了拆分实现了精细化管理管理的条件。


服务器高级架构体系:https://xxetb.xet.tech/s/4DEnTI

目录
相关文章
|
5月前
|
前端开发 JavaScript
工作中代码书写规范
前端代码规范增进代码整洁与团队协作,降低维护成本。包括代码规范、风格和注释建议:选择编程语言对应的编码规范,统一命名、缩进和换行规则;注重代码风格的一致性、简洁性和可配置性;注释要简洁明了,位于关键位置。通过制定规范文档、使用代码检查工具、定期代码审查和鼓励改进来执行规范,提升团队效率和代码质量。
59 0
|
11月前
|
安全 程序员 C++
代码规范:函数设计
除非告诉人们“危险”是什么,否则这个警告牌难以起到积极有效的作用。难以理解的断言常常被程序员忽略,甚至被删除。 ↩︎
75 0
|
5月前
|
存储 缓存 算法
代码简洁之道:我们该如何规范代码的命名?
代码简洁之道:我们该如何规范代码的命名?
90 1
|
前端开发 JavaScript
|
程序员
代码的规范
代码的规范
145 0
|
算法 IDE 程序员
代码编写规范
代码编写规范
|
设计模式 传感器 JavaScript
|
JSON 前端开发 JavaScript
规范(一):代码规范
规范(一):代码规范
规范(一):代码规范
|
程序员 Go 开发者
规范的代码风格要求 | 学习笔记
简介:快速学习规范的代码风格要求
127 0
规范的代码风格要求 | 学习笔记
|
Java
开发规范实战(一)代码书写规范
开发规范实战(一)代码书写规范
192 0
开发规范实战(一)代码书写规范