................................................................. 14 一. 前言 在商品化软件开发中, 非常重视程序编码规范, 不同的公司或组织有不同规范, “GNU 比如: 、Coding Standards”“Google C Style Guide”等。
C程序编码规范(C Coding Standard)包含以下两个含义: 1. C程序设计规范 2. C程序书写规范 程序设计规范牵涉程序开发过程中可靠性、可维护性、安全性的话题,而程序书写规范是程序员约定的通行书写格式。
本文主要讨论的是 C的程序书写格式。
现在计算机专业教学过程中不重视程序书写格式规范化教学,一些教材中的程序书写格式五花八门,造成学生在大学四年中缺乏规范化的编码训练,直接影响学生毕业求职与工作。
C的程序书写规范最初缘自 KD 的《C Programming Language》一书以及 Unix 早期的源代码,一般称为“KD 的风格”,最典型的特征是函数参数声明、带下划线的标识符和花括号的位置,早期的程序缩进通常为 8 个空格,如下面程序:int sample_functionint x y / x 和 y 为函数的形式参数 / …… if …… …… …… …… 随着 C 语言的发展,特别是 C的出现,特别是微软公司的 Windows 程序设计的影响,程序设计风格发生的一系列的变化,出现的 GNU、Linux、VC 等规范,也出现标识符的匈牙利命名法等规范,主要还是分为 Unix/Linux 和 Windows 两大流派,
Java 的风格偏向于 Unix/Linux。
本文主要是综合网络上发布的资料,根据程序开发的通行做法,约定了 C程序的书写规范。
二. C程序书写规范 1. 头文件 头文件必须包含ifndef…endif 结构。
ifndef COM_COMPANY_MODULE_CLASSNAME_Hdefine COM_COMPANY_MODULE_CLASSNAME_H :endif // COM_COMPANY_MODULE_CLASSNAME_H 参见: 文献1第 40 条 2. 语句 一条语句占一行或多行,避免一行写多条语句,除非这些语句非常相关。
参见: 文献2“One Statement Per Line”章节 3. 程序注释 程序注释包含段注释和行注释两种,段注释单独一行或几行,主要说明下面一段程序完成什么功能,行注释用于解释某条语句的功能。
注意注释书写的对齐。
// 该函数完成的功能void SampleFunction // 段注释 1 …… // 行注释 1 …… // 行注释 2 …… // 段注释 2 …… if …… // 段注释 3 // …… 4. 缩进 程序块缩进大小为 2 到 4 个空格之间,通常为 4 个空格。
不用采用 TAB 控制符,而是采用 、在空格符。
如在 Visual Studio2005 中选择“工具-选项-文本编辑器-C/C-制表符-插入空格” 。
DEV C中的“Editor Options”取消“Use Tab Character” 参见: 文献1第 38 条 文献2“Indentation/Tabs/Space Policy”章节 文献 4“Spaces vs. Tabs”章节 5. 程序块 程序块的花括号位置有三种写法,推荐采用第一或第二种格式// 现代 C/C写法while done doSomething done moreToDo// 传统 C/C写法while done doSomething done moreToDo// GNU 写法while done doSomething done moreToDo 参见: 文献1第 72 条 文献5“Formatting Your Source Code”章节 6. 空行 正如一篇文章中要有自然段一样,在程序中要适当使用空行来表示程序段落。
在必要时,程序段落的开始要加上注释,说明该段程序的功能。
在函数与函数之间,建设有两行以上的空行。
Matrix4x4 matrix new Matrix4x4double cosAngle Math.cosangledouble sinAngle Math.sinanglematrix.setElement1 1 cosAnglematrix.setElement1 2 sinAnglematrix.setElement2 1 -sinAnglematrix.setElement2 2 cosAnglemultiplymatrix 在类声明 class中,public、protected、private 节之间加上空行,除非这个类声明的规模很小。
参见: 文献1第 86、87 条 文献4“Class Format”章节 7. 空格 空格的使用包含以下几种情况: 1 双目运算符前后加上空格,单目运算符前后不要加空格 2 C保留字后必须加上空格 3 逗号后面必须加上空格 4 for 语句中的分号后加空格a b c d // NOT: abcdwhile true // NOT: whiletrue ...doSomethinga b c d // NOT: doSomethingabcdfor i 0 i 10 i // NOT: fori0i