许继集团有限公司发布
××××-××-××实施
××××-××-××发布
C/C++语言代码编写规范
(征求意见稿)
Q/XJ ××××—××××
Q/XJ
许继集团有限公司企业标准
目    次
前    言    III
1 范围    1
2 规范性引用文件    1
3 术语和定义    1
4 文件结构    1
4.1 概述    1
4.2 版权和版本的声明    1
4.3 头文件的结构    2
4.4 定义文件的结构    2
5 程序的版式    3
5.1 空行    3
5.2 代码行    4
5.3 代码行内的空格    5
5.4 对齐    5
5.5 长行拆分    6
5.6 注释    8
6 命名规则    13
6.1 共性规则    13
6.2 一般命名规则    14
7 其它规则    15
7.1 布尔变量与零值比较    15
7.2 整型变量与零值比较    16
7.3 浮点变量与零值比较    16
7.4 指针变量与零值比较    16
附 录 A (资料性附录) 良好的C/C++编程风格;    17
A.1 良好的注释技巧    17
A.2 表达式和基本语句    18
A.3 变量、结构与数据类型    20
A.4 常量    25
A.5 函数    26
A.6 宏    30
A.7 程序效率    31
A.8 可测性    35
A.9 质量保证    38
A.10 代码编辑、编译、审查    43

1前    言
本标准的附录A为资料性附录。
本标准由许继电气股份有限公司提出。
本标准由许昌继电器研究所归口。
本标准起草单位:许继保护及自动化事业部、科研处、北京许继电气有限公司、珠海许继电气有限公司、深圳市许继昌达电网控制设备有限公司。
本标准主要起草人:张新昌、包伟、杨智德、李江林、李旺、王若醒、刘彬、王伟东。

C/C++语言编程规范
11 范围
本标准规定了软件编程中程序文件的结构和编程风格方面的一些规则。
本标准适用于C/C++编程。
12 规范性引用文件
下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。
GB/T 5271.1-2000 信息技术 词汇 第1部分:基本术语
GB/T 5271.7-1986 数据处理词汇 07部分:计算机程序设计
GB/T 5271.15-1986 数据处理词汇 15部分:程序设计语言
13 术语和定义
GB/T 5271.1-2000、GB/T 5271.7-1986和GB/T 5271.15-1986确立的术语和定义适用于本标准。
14 文件结构
14.1 概述
每个C/C++程序应至少包括两类文件。一个文件用于保存程序的声明,称为头文件。另一个文件用于保存程序的实现,称为定义文件。
C/C++程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。
14.2 版权和版本的声明
/*
* Copyright (c) 2001,许继集团有限公司
* All rights reserved.
*
* 文件名称:filename.h
*     要:简要描述本文件的内容
*
* 版本号:1.2  作者:作者(修改者) 完成日期:2003720
*
* 版本号1.1  作者:作者(修改者)  完成日期:2003520
* 版本号1.0  作者:作者(修改者)  完成日期:2003220
*/
图1 版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(见图1),主要内容有:
1—— 版权信息;
2—— 文件名称,摘要;
3—— 当前版本号,作者/修改者,完成日期;
4—— 版本历史信息。
14.3 头文件的结构
14.3.1 概述
头文件由三部分内容组成:
5—— 头文件的版权和版本声明(见图1);
6—— 预处理块;
7—— 函数和类结构声明等。
若头文件名称为 graphics.h,头文件的结构见图2
// 版权和版本声明见图1
#ifndef    GRAPHICS_H    // 防止graphics.h被重复引用
#define    GRAPHICS_H
#include <math.h>        // 引用标准库的头文件
#include myheader.h     // 引用非标准库的头文件
void Function1();    // 全局函数声明
class Box                // 类结构声明
{
};
                    // 其它
#endif
图2 C/C++头文件的结构
14.3.2 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
14.3.3  #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
14.3.4  #include filename.h 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
14.3.5 头文件中宜只存放“声明”    而不存放“定义”。
14.3.6 不提倡使用全局变量,不宜在头文件中出现extern int value 这类声明。
14.4 定义文件的结构
定义文件有三部分内容:
8—— 定义文件的版权和版本声明(见图1);
9—— 对一些头文件的引用;
10—— 程序的实现体(包括数据和代码)。
若定义文件的名称为 graphics.cpp,定义文件的结构见图3。
// 版权和版本声明见图1
#include “graphics.h”    // 引用头文件
// 全局函数的实现体
void Function1()
{
}
// 类成员函数的实现体
void Box::Draw()
{
}
图3 C/C++定义文件的结构
15 程序的版式
15.1 空行
15.1.1 在变量声明之后、每个类声明之后和每个函数定义结束之后应加空行(见图4())
15.1.2 在一个函数体内,逻辑上密切相关的语句之间应不加空行,其它地方应加空行分隔(见图4())
system的头文件
// 空行
void Function1()
{
 
}
// 空行
void Function2()
{
 
}
// 空行
void Function3()
{
 
}
// 空行
while (condition)
{
    statement1;
    // 空行
    if (condition)
    {
        statement2;
    }
    else
    {
        statement3;
    }
// 空行
    statement4;
图4 函数之间的空行(左),函数内部的空行(右)
15.2 代码行
15.2.1 一行代码宜只做一件事情,如只定义一个变量,或只写一条语句(见图5)
15.2.2 ifforwhiledo等语句应自占一行,执行语句不应紧跟其后。不论执行语句有多少都应加‘{}(见图5)
int width;    // 宽度
int height;    // 高度
int depth;    // 深度
int width, height, depth; // 宽度高度深度
x = a + b;
y = c + d;
z = e + f;
X a + b;  y = c + d;  z = e + f;
if (width < height)
{
dosomething();
}
if (width < height) dosomething();
for (initialization; condition; update)
{
dosomething();
}
// 空行
other();
for (initialization; condition; update)
dosomething();
other();
图5 风格良好的代码行(左),与风格不良的代码行(右)
15.2.3 尽可能在定义变量的同时初始化该变量。
若变量的引用处与其定义处相隔比较远,变量的初始化易被忘记。若引用了未被初始化的变量,易导致程序错误。
1示例
int width = 10;    // 定义并初绐化width
int height = 10;    // 定义并初绐化height
int depth = 10;    // 定义并初绐化depth
15.3 代码行内的空格
void Func1(int x, int y, int z);          // 良好的风格
void Func1 (int x,int y,int z);          // 不良的风格
if (year >= 2000)                        // 良好的风格
if(year>=2000)                            // 不良的风格
if ((a>=b) && (c<=d))                    // 良好的风格
if(a>=b&&c<=d)                            // 不良的风格
for (i=0; i<10; i++)                      // 良好的风格
for(i=0;i<10;i++)                        // 不良的风格
for (i = 0; I < 10; i ++)                // 过多的空格
x = a < b ? a : b;                        // 良好的风格
x=a<b?a:b;                                // 不好的风格
int *x = &y;                              // 良好的风格 
int * x = & y;                            // 不良的风格 
array[5] = 0;                            // 不应写成 array [ 5 ] = 0;
a.Function();                            // 不应写成 a . Function();
b->Function();                            // 不应写成 b -> Function();
图6 代码行内的空格

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。