资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
. . C+程序书写规万 健2009/8/8目录一.前言2二.C+程序书写规31.头文件32.语句33.程序注释34.缩进45.程序块46.空行57.空格68.圆括弧69.浮点常量710.对齐711.类的声明812.指针和引用变量9三.标识符命名规则101.符号常量112.类,常数,结构,枚举和类型名113.变量名,参数名,缩略语114.函数名115.匈牙利命名法12四.C/C+代码格式化工具131.SourceFormatX132.Astyle13五.参考文献14一. 前言在商品化软件开发中,非常重视程序编码规,不同的公司或组织有不同规,比如:“GNU Coding Standards”、“Google C+ Style Guide”等。C+程序编码规(C+ Coding Standard)包含以下两个含义:1. C+程序设计规2. C+程序书写规程序设计规牵涉程序开发过程中可靠性、可维护性、安全性的话题,而程序书写规是程序员约定的通行书写格式。本文主要讨论的是C+的程序书写格式。现在计算机专业教学过程中不重视程序书写格式规化教学,一些教材中的程序书写格式五花八门,造成学生在大学四年中缺乏规化的编码训练,直接影响学生毕业求职与工作。C+的程序书写规最初缘自K&D的C Programming Language一书以及Unix早期的源代码,一般称为“K&D的风格”,最典型的特征是函数参数声明、带下划线的标识符和花括号的位置,早期的程序缩进通常为8个空格,如下面程序:int sample_function()int 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_H#define COM_COMPANY_MODULE_CLASSNAME_H :#endif / COM_COMPANY_MODULE_CLASSNAME_H参见:l 文献1第40条2. 语句一条语句占一行或多行,避免一行写多条语句,除非这些语句非常相关。参见:l 文献2“One Statement Per Line”章节3. 程序注释 程序注释包含段注释和行注释两种,段注释单独一行或几行,主要说明下面一段程序完成什么功能,行注释用于解释某条语句的功能。注意注释书写的对齐。/ 该函数完成的功能void SampleFunction()/ 段注释1 / 行注释1 / 行注释2/ 段注释2if () / 段注释3 / 4. 缩进程序块缩进大小为2到4个空格之间,通常为4个空格。不用采用TAB控制符,而是采用空格符。如在Visual Studio2005中选择“工具-选项-文本编辑器-C/C+-制表符-插入空格”、在DEV C+中的“Editor Options”取消“Use Tab Character”。参见:l 文献1第38条l 文献2“Indentation/Tabs/Space Policy”章节l 文献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();参见:l 文献1第72条l 文献5“Formatting Your Source Code”章节6. 空行正如一篇文章中要有自然段一样,在程序中要适当使用空行来表示程序段落。在必要时,程序段落的开始要加上注释,说明该段程序的功能。在函数与函数之间,建设有两行以上的空行。Matrix4x4 matrix = new Matrix4x4();double cosAngle = Math.cos(angle);double sinAngle = Math.sin(angle);matrix.setElement(1, 1, cosAngle);matrix.setElement(1, 2, sinAngle);matrix.setElement(2, 1, -sinAngle);matrix.setElement(2, 2, cosAngle);multiply(matrix);在类声明class中,public、protected、private节之间加上空行,除非这个类声明的规模很小。参见:l 文献1第86、87条l 文献4“Class Format”章节7. 空格空格的使用包含以下几种情况:(1) 双目运算符前后加上空格,单目运算符前后不要加空格(2) C+保留字后必须加上空格(3) 逗号后面必须加上空格(4) for语句中的分号后加空格a = (b + c) * d; / NOT: a=(b+c)*dwhile (true) / NOT: while(true) .doSomething(a, b, c, d); / NOT: doSomething(a,b,c,d);for (i = 0; i 10; i+) / NOT: for(i=0;i10;i+)这几点是所有的代码书写规中都要求的,但也是程序员最容易忽视的地方。在运算符前后加上空格,可以大大改善复杂表达式和复杂语句的可读性。参见:l 文献1第84条8. 圆括弧圆括弧的使用注意以下几点:(1) 不要在关键字后直接跟上圆括弧,中间必须有空格(2) 函数名后直接跟上圆括弧(以示和关键字的区别,但有些规中要求和关键字一样加上空格)(3) 函数参数名中,括弧和参数之间没有空格(有些规中有空格,但多数没有)(4) return语句后不要用圆括弧(如果不是必须的话)if (condition)while (condition)strcpy(s, s1);return 1;参见:l 文献2“Parens () with Key Words and Functions Policy”章节l 文献3“Example 17: The left parenthesis always directly after the function name”章节l 文献4“Function Declarations and Definitions”章节9. 浮点常量浮点常量必须有小数点。double total = 0.0; / NOT: double total = 0;double speed = 3.0e8; / NOT: double speed = 3e8;double sum;sum = (a + b) * 10.0;参见:l 文献1第66条10. 对齐适当地、合理地使用对齐可以使程序更易读。 DWORD mDword DWORD* mpDword char* mpChar char mChar mDword = 0; mpDword = NULL; mpChar = NULL; mChar = 0;ReturnType ClassName:ReallyLongFunctionName(Type par_name1, Type par_name2, Type par_name3) DoSomething();参见:l 文献1第88条l 文献2“Alignment of Declaration Blocks”章节l 文献4“Function Declarations and Definitions”章节11. 类的声明类的声明如下格式:/ 格式1,public等关键字缩进。文献1的格式class SomeClass : public BaseClasspublic: protected: private: ;/ 格式2,VC通行格式,public等关键字不缩进。文献2的格式,建议使用这种格式class SomeClass : public BaseClasspublic: protected: private: ;按照接口与实现分离的原则,一般不要把成员函数的实现放在class中。按public、protected、private的次序声明各成员。注意在派生类和基类之间的冒号两边加上空格。参见:l 文献1第36、73条l 文献2“Class Layout”章节12. 指针和引用变量传统的C书写风格,指针变量声明时“*”符号是紧挨在变量名之前,如int *p1, *p2, *p3;上述书写方法是C语言设计的缺陷,因为变量类型应是“int*”或不是“int”,近年来C/C+程序设计中流行将“*”紧挨在变量类型之后,这种书写格式要求一行声明一个变量,即int* p1;int* p2;int* p3;引用类型的“&”符号也类似。上述两种书写格式均可,但
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号