C++编程风格指南.docx
《C++编程风格指南.docx》由会员分享,可在线阅读,更多相关《C++编程风格指南.docx(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.译Google C+编程风格指南()完 Fox 2008-07-23 15:42:32, $62 翻译 C+ 开始评论本文最早(2008/07/23)发表于:C+博客原文地址:Google C+ Style Guide 规则之例外前面说明的编码习惯基本是强制性的,但所有优秀的规则都允许例外。1 .现有不统一代码(Existing Non-conformant Code)对于现有不符合既定编程风格的代码可以网开一面。当你修改使用其他风格的代码时,为了与代码原有风格保持一致可以不使用本指 南约定。如果不放心可以与代码原作者或现在的负责人员商讨,记住,一致性包 括原有的一致性。1. Windows
2、 代码(Windows Code)Windows程序员有自己的编码习惯,主要源于Windows的些头文件和其他 Microsoft代码。我们希望任何人都可以顺利读懂你的代码,所以针对所有平台 的C+编码给出个单独的指导方案。如果你一直使用Windows编码风格的,这儿有必要重申一下某些你可能会忘记的 指南(译者注,我怎么感觉像在被洗脑:D):1)不要使用匈牙利命名法(Hungarian notation,如定义整型变量为iNum), 使用Google命名约定,包括对源文件使用.cc扩展名:2) Windows定义了很多原有内建类型的同义词(译者注,这一点,我也很反感), 如DWORD、HAND
3、LE等等,在调用Windows API时这是完全可以接受甚至鼓励的, 但还是尽量使用原来的C+类型,例如,使用const TCHAR *而不是LPCTSTR;3)使用Microsoft Visual C+进行编译时,将警告级别设置为3或更髙,并将 所有warnings当作errors处理:4)不要使用#pragma once;作为包含保护,使用C+标准包含保护,包含保护的 文件路径包含到项目树顶层(译者注,#include);5)除非万不得已,否则不使用任何不标准的扩展,如#pragma和deci spec, 允许使用_declspec (dll import)和一deci spec (dll
4、export),但必须通过 DLL IMPORT和DLLEXPORT等宏,以便其他人在共享使用这些代码时容易放弃这些 扩展。在Windows上,只有很少些偶尔可以不遵守的规则:1)通常我们禁止使用多重继承,但在使用COM和ATL/WTL类时可以使用多重继 承,为了执行继或包/迫上类及其接口时可以使用多重实现继承;2)虽然代码中不应使用异常,但在ATL和部分STL (包括Visual C+的STL) 中异常被广泛使用,使用ATL时,应定义.ATL_NO_EXCEPT1ONS以屏蔽异常,你 要研究一下是否也屏蔽掉STL的异常,如巢不辞最开启编译器异常也可以,注 意这只是为了编译STL,自己仍然不要
5、写含异常处理的代码;3)通常每个项目的每个源文件中都包含-个名为StdAfx. h或precompile. h的 头文件方便头文件预编译,为了使代码方便与其他项目共享,避免显式包含此文 件(precompile, cc除外),使用编译器选项/F1以自动包含;4)通常名为resource/、且只包含宏的资源头文件,不必拘泥于此风格指南。团队合作参考常识,保持一致。编辑代码时,花点时间看看项目中的其他代码并确定其风格,如果其他代码if 语句中使用空格,那么你也要使用。如果其中的注释用星号(*)围成个盒子 状,你也这样做;* Some comments are here.* There may be
6、 many lines.编程风格指南的使用要点在于提供个公共的编码规范,所有人可以把精力集中 在实现内容而不是表现形式上。我们给出了全局的风格规范,但局部的风格也很 重要,如果你在个文件中新加的代码和原有代码风格相去甚远的话,这就破坏 了文件本身的整体美观也影响阅读,所以要尽量避免。好了,关于编码风格写的差不多了,代码本身是更有趣的,尽情享受吧!Benjy WeinbergerCraig SilversteinGregory Ei tzmannMark MentovaiTashana Landray译者:终于翻完了,前后历时两周,整个过程中,虽因工作关系偶有懈怠,但 总算不是虎头蛇尾(起码我的
7、态度是非常认真的:D),无论是否能对你有所裨 益,对我而言,至少是温习了一些以前知道的知识,也学到了一些之前不知道 的知识。刚好这两天还不是特紧张,赶紧翻完了,要开始干活了.译Google C+编程风格指南(七) Fox 2008-07-23 15:40:04, $82翻译 C+ 开始评论本文最早(2008/07/23)发表于:C+博客原文地址:Google C+ Style Guide,格式代码风格和格式确实比较随意,但个项目中所有人遵循同风格是非常容易 的,作为个人未必同意下述格式规则的每处,但整个项目服从统的编程风格 是很重要的,这样做才能让所有人在阅读和理解代码时更加容易。1 .行长度
8、(Line Length)每一行代码字符数不超过80 我们也认识到这条规则是存有争议的,但如此多的代码都遵照这规则,我们感 觉一致性更重要。优点:提倡该原则的人认为强迫他们调整编辑器窗口大小很野蛮。很多人同时并 排开几个窗口,根本没有多余空间拓宽某个窗口,人们将窗口最大尺寸加以限定, 一致使用80列宽,为什么要改变呢?缺点:反对该原则的人则认为更宽的代码行更易阅读,80列的限制是上个世纪 60年代的大型机的古板缺陷;现代设备具有更宽的显示屏,很轻松的可以显示 更多代码。结论:80个字符是最大值。例外: 1)如果一行注释包含了超过80字符的命令或URL,出于复制粘贴的方便可以超 过80字符;2)
9、包含长路径的可以超出80歹,尽量避免;3)头文件保护(防止重复包含第一篇)可以无视该原则。2 .非 ASCH 字符(Non-ASCII Characters)尽量不使用非ASCII字符,使用时必须使用UTF-8格式。哪怕是英文,也不应将用户界面的文本硬编码到源代码中,因此非ASCII字符要 少用。特殊情况下可以适当包含此类字符,如,代码分析外部数据文件时,可以 适当硬编码数据文件中作为分隔符的非ASCII字符串;更常用的是(不需要本地 化的)单元测试代码可能包含非ASCII字符串。此类情况下,应使用UTF-8格式, 因为很多工具都可以理解和处理其编码,十六进制编码也可以,尤其是在增强可 读性的
10、情况下 如、xEFxBBxBF”是 Unicode 的 zero-w情th no-break space 字符,以UTF-8格式包含在源文件中是不可见的。3 .空格还是制表位(Spaces vs. Tabs)只使用空格,每次缩进2个空格。使用空格进行缩进,不要在代码中使用tabs,设定编辑器将tab转为空格。译者注:在前段时间的关于Debian开发学习日记一文中,曾给出针对C/C+编 码使用的vim配置。4 .函数声明与定义(Function Declarations and Definitions)返回类型和函数名在同行,合适的话,参数也放在同一行。函数看上去像这样:ReturnType C
11、lassName:FunctionName(Type par_namel, Type par_name2) DoSomethingO ;如果同一行文本较多,容不下所有参数:ReturnType ClassName:Real1yLongFunctionName(Type par_namel, Type par_name2, Type par_name3) DoSomethingO ;甚至连第一个参数都放不下:ReturnType LongClassName:ReallyReallyReallyLongFunctionName(Type par_namel, / 4 space indentTyp
12、e par_name2,Type par_name3) DoSomethingO ; / 2 space indent注意以下儿点:1)返回值总是和函数名在同一行;2)左圆括号(open parenthesis)总是和函数名在同一行;3)函数名和左圆括号间没有空格;4)圆括号与参数间没有空格;5)左大括号(open curly brace)总在最后一-个参数同一一行的末尾处;6)右大括号(close curly brace)总是单独位于函数最后,彳了;7)右圆括号(close parenthesis)和左大括号间总是有一个空格;8)函数声明和实现处的所有形参名称必须保持一致;9)所有形参应尽可
13、能对齐;10)缺省缩进为2个空格; 11)独立封装的参数保持4个空格的缩进。如果函数为const的,关键字const应与最后个参数位于同一行。/ Everything in this function signature fits on a single line ReturnType FunctionName(Type par) const / This function signature requires multiple lines, but / the const keyword is on the line with the last parameter. ReturnType R
14、eallyLongFunctionName(Type pari,Type par2) const )如果有些参数没有用到,在函数定义处将参数名注释起来:/ Always have named parameters in interfaces.class Shape (public:virtual void Rotate(double radians) = 0; )/ Always have named parameters in the declaration.class Circle : public Shape public:virtual void Rotate(double radia
15、ns); )/ Comment out unused named parameters in definitions.void Circle:Rotate(double /*radians*/) / Bad - if someone wants to implement later, its not clear what the / variable means.void Circle:Rotate(double) 译者注:关于UNIX/Linux风格为什么要把左大括号置于行尾(.cc文件的函数 实现处,左大括号位于行首),我的理解是代码看上去比较简约,想想行首除了 函数体被对大括号封在起之外
16、,只有右大括号的代码看上去确实也舒服; Windows风格将左大括号置于行首的优点是匹配情况一目了然。5 .函数调用(Function Calls)尽量放在同一行,否则,将实参封装在圆括号中。函数调用遵循如下形式:bool retval = DoSomething(argument1, argument2, arguments);如果同一行放不下,可断为多行,后面每一行都和第一个实参对齐,左圆括号后 和右圆括号前不要留空格:bool retval = DoSomething(averyveryveryverylongargumentl, argument2, arguments);如果函数参数
17、比较多,可以出于可读性的考虑每行只放个参数:bool retval = DoSomething(argument1, argument2, arguments, argument4);如果函数名太长,以至于超过行最大长度,可以将所有参数独立成行:if (.)(if (.)(DoSomethingThatRequiresALongFunctionName ( very_long_argument1, / 4 space indent argument2, arguments, argument4);)6 .条件语句(Conditionals)更提倡不在圆括号中添加空格,关键字else另起一行。对
18、基本条件语句有两种可以接受的格式,种在圆括号和条件之间有空格,一-种 没有。最常见的是没有空格的格式,那种都可以,还是一致性为主。如果你是在修改 个文件,参考当前已有格式;如果是写新的代码,参考目录下或项目中其他文件 的格式,还在徘徊的话,就不要加空格了。if (condition) / no spaces inside parentheses . / 2 space indent. else / The else goes on the same line as the closing brace.)如果你倾向于在圆括号内部加空格:if ( condition ) / spaces insi
19、de parentheses - rare ./ 2 space indent. else / The else goes on the same line as the closing brace.注意所有情况下if和左圆括号间有个空格,右圆括号和左大括号(如果使用的 话)间也要有个空格:if(condition)/ Bad - space missing after IF.if (condition) / Bad - space missing before .if(condition) / Doubly bad.if (condition) / Good - proper space a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 编程 风格 指南
限制150内