




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档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;引用类型的“&”符号也类似。上述两种书写格式均可,但要注意在一个程序代码里只遵循一种书写风格。参见:l 文献2“Pointer Variables”章节l 文献3“Pointers and References”章节l 文献5“Pointer and Reference Expressions”章节三. 标识符命名规则标识符的命名用英文,避免使用其它语言或汉语拼音,取名应能表示实际意义。标识符一般由一个或几个单词构成,单词的首字母大写用于分隔单词。如果该标识符的作用域比较大,则取名较长;如果单词的作用域较小,写取名较短。变量用名词或词组、函数名用动词或动词短语。int numStudents; / number of students的缩写void CreateWindow(); / Create Window的缩写在GNU的编程规范中,依然延续早期的K&D风格,不主张标识符中大小写字母混用,单词之间用下划线“_”分隔。参见:l 文献1“Naming Conventions”章节l 文献3“Assign Names”章节l 文献6l 文献7l 文献5“Naming Variables, Functions, and Files”章节1. 符号常量符号常量采用全大写字母的方式,单词和单词之间用“_”分隔。#define MAX_PATH 2562. 类,常数,结构,枚举和类型名类、常数、结构、枚举和类型名使用“UpperCamelCase”,即第一个字母大写。enum BackgroundColor None,Red,Green,Blue;const int FixedWidth = 10;class BankAccount / .;typedef list Portfolio;Visual C+的MFC类库中,类名的第一个字母以大写“C”开始,如“CWindow”、“CFile”。3. 变量名,参数名,缩略语变量名、参数名、缩略语使用“lowerCamelCase”。int fixedWidth = 10; void LoadXmlDocumnet(const char *docName); / 注意缩略语XML必须写成Xml4. 函数名函数名有两种不同的风格:l lowerCamelCase,为Unix程序设计和Java程序设计风格。如loadXmlDocument()l UpperCamelCase,为Windows程序设计风格。如CreateWindow()5. 匈牙利命名法匈牙利命名法(Hungarian notation)是变量名在上述取名规划的基础上,加上小写字母前缀用于表示数据类型,它的好处是在阅读程序时,看到一个变量名,不用去翻看前面的变量声明类型,直接就可以知道该变量的类型。对匈牙利命名法有不同的看法,很多观点认为此种命名法过于复杂,而且现代的开发工具在查看程序时,只要光标移动某个变量,可以自动显示这个变量的声量,匈牙利命名法是多余的。在Windows程序设计里,广泛使用匈牙利命名法(如VC、VB、C+ Builder);在Unix和Java程序设计中,匈牙利命令法使用得较少。匈牙利命名法常用的前缀:l m_类的数据成员,如m_nLengthl g_全局变量,如g_szConnectionl n或i整型变量,如nLengthl c或ch字符型变量,如cInputl b布尔型变量,如bFoundl l长整型变量,如lCountl f单精度浮点型变量,如fRadiusl d双精度浮点型变量,如dRadiusl u无符号变量l sz以0结束的字符串,如szNamel p指针变量,可以和其它类型前缀联合使用,如pszPathl r引用变量,可以和其它类型前缀联合使用,如rnStatus除此之外,还可以根据程序中不同的数据类型(包括自定义的数据类型),自行约定一些前缀,如:l win表示窗口类型变量,如winResultl str表示STL的string类型变量,如strMessagel dw表示Double Word变量,如dwFlagl rect表示矩形图形变量,rectRegion四. C/C+代码格式化工具SourceFormatX和astyle是两个较好的C/C+代码格式化工具,它们可以把现有的程序代码按一定的规范进行调整,使得风格更统一。1. SourceFormatXSourceFormatX是国产的基于Windows的代码格式化工具,有较强的设定功能。能较好地处理缩进、运算符左右空格的添加,但不是缩进和空格添加都正确。2. Astyleastyle是基于命令行的代码格式化工具,有多个操作系统版本,在Windows系统中必须在命令窗口中使用。Astyle命令选项格式符合GNU的使用规范。Astyle是开源软件,安装好以后,源程序放在astylesrc目录下,这些源程序书写格式非常规范,也符合本文所推荐的格式,可以供程序书写参考。Astyle的执行程序放在astylebin目录下,在命令行上输入:astylebinastyle a.cpp即可把a.cpp的格式进行修正,修正后的代码还是在a.cp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计考试题及答案
- 中兽医基础知到智慧树答案
- 中外文明交流史知到智慧树答案
- 居民健康档案管理培训考核试题(含答案)
- 肺结核病患者健康管理培训试题及答案
- 从生产中谈猪病毒性腹泻的防控专题培训考试试题(附答案)
- 2025度酒店客房卫生间改造合同协议书
- 2025年度立体停车库设计与施工合同
- 2025版建筑机械设备租赁与售后服务合同范文
- 2025年新型城镇化包工不包料安置房建设合同
- 六年级家长会课件
- 2025年安徽省淮南市【辅警协警】笔试模拟考试题(含答案)
- 废气处理活性炭吸附操作规范
- 创伤急救基本知识培训课件
- T-SCSTA001-2025《四川省好住房评价标准》
- 生态学基本原理解析课件
- 煤灰清理施工方案
- 《大学生军事理论教程》第三章
- 黄遵宪年谱长编(上下册):国家社科基金后期资助项目
- 均值X-R极差分析控制图(自动测算表)
- 体力劳动工作管理程序
评论
0/150
提交评论