您的位置:首页 > 编程语言 > C语言/C++

向google学习良好的C++代码风格-(1)概述

2009-07-25 09:40 393 查看
前言

google 怎么写的C++代码?

这个好说,它的代码风格“白皮书”,出到第3版了,原文在此:

[英] http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

有没有“汉化版”也有。google的号召力不容置疑:

[汉] http://code.google.com/p/zh-google-styleguide/

 

开始之前,问几个问题:

Q: 代码风格(code style),是指代码的排版格式,变量命名这些基础的东西吗?

A:不仅仅是。至少google的代码风格,覆盖了不少“良好的设计思想”,当然,也不能因此认为它是设计模式。夹在两者中间吧,所以非常有利于长期学习。

 

Q:google 是很牛,但它提倡的风格,就一定算是好的吗?

A:见仁见智啦,我就不觉得它的风格最好(我觉得我的风格最好:))。

 

Q:我学习了google代码风格,就从此从一而始,相偕至老吗?

A:风格中提到的近于“良好设计”准则的内容,可以做为学习目标,坚持下去(但仍然有可能会有所改变)。至于“代码格式”的指南,不可能,也不需要一直坚持。 

1)、google的C++代码风格,自身也在一起修订。

2)、google的C++代码风格指南中,最后就留了一节“例外之处”。

3)、另外,代码风格还要根据工作以后,自己的所处的团队保持统一。我一开始坚持这种花括号近三年:

Code:

if (a > b) {  

   //do something  

   }  

后来进入创新(Creative)上班,我就随新公司的大流,改成:

Code:

if (a>b)  

{  

    //do something  

}  

随着IDE的进步,像此类的变换,都是工具帮我们做好了。平常习惯一下就可以。总之,代码格式没有最好,只有更好,不要太过于坚持自己非要怎样怎样。

 

Q:既然没法从一而终,干嘛让我学习一特定的google的风格?

A:因为这边的朋友多数是学生,还没有参加工作,也没有身处团队。如果上班前完全没有学过风格,那就有可能被面试者盖一顶“典型的初学者”写的代码风格这帽子。还是要先“归队”到一种正规的风格比较好(所以起点直接挑高一点,学google的)。

 

Q:你说你觉得“自己的风格”最好,那问一下:1)为什么你不采用google的风格,2)为什么不干脆就讲你自己的风格呢?

A:两点一起回答。我在1996年开始学习C++。但google是在 1998年的9月成立的。后来资格老了些,就定了不少语言的编码风格,其中C++有100多条,但又区分为VC,C++Builder,及Linux下类似KDevelop或Code::Blocks的风格。如前面所讲,IDE现在都很能来事儿,比如google 讲到的第一点:1.1. #define 保护 , 非常不巧,很多IDE都提供了文件生成向导,结果它们都按自己的风格来处理这一点,那怎么办?还能怎么办,就依了呗。所以我定的C++代码风格,会更琐碎一些,甚至更“世俗”一些,关键是没有什么知名度,唉~~:),不适合向学生推荐。

 

Q:我看到google讲的已经很详细了啊,并且又有中文版,你还准备怎么讲哪?有必要吗?

A:我摘一点我觉得重要原文段落讲。在一开始的“Background/背景”里,google说得很清楚了:

“Note that this guide is not a C++ tutorial: we assume that the reader is familiar with the language.”这不是给初学者的看的。所以我呢就多补充些,尽量让它适合初学者。当然也不是说初学者改看我的这些小文章,就可以看懂一切,但我至少可以补充一些方向性的内容。另外呢,凡是遇上一些和我自己的风格很不一致的地方,我都会不甘寂寞的吭一声的。

============================废话分割线===================================

Background

C++ is the main development language used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.

C++是Google很多开源项目的主要开发语言。每一人C++程序员都知道啦,这门语言拥有大量强大的特性,却也因此带来许多复杂性,以致于代码多出许多BUG,以及让代码变得很难阅读和维护。

The goal of this guide is to manage this complexity by describing in detail the dos and don'ts of writing C++ code. These rules exist to keep the code base manageable while still allowing coders to use C++ language features productively.

本指南的目的是:通过详细地描述在写C++代码时,哪些应该做,哪些不该做,从而驾驭那些复杂性。所提供的规则,不仅保证代码的可管理性,而且让能让我们更有成效地使用C++语言的特性。

Style, also known as readability, is what we call the conventions that govern our C++ code. The term Style is a bit of a misnomer, since these conventions cover far more than just source file formatting.

“风格”,也叫“可读性”,其实就是我们用来管理自己的C++代码的一些约定。把这些约束叫成“风格”是有点不太对头,因为这里的“约定”肯定不仅仅是源代码的格式那么简单。

One way in which we keep the code base manageable is by enforcing consistency. It is very important that any programmer be able to look at another's code and quickly understand it. Maintaining a uniform style and following conventions means that we can more easily use "pattern-matching" to infer what various symbols are and what invariants are true about them. Creating common, required idioms and patterns makes code much easier to understand. In some cases there might be good arguments for changing certain style rules, but we nonetheless keep things as they are in order to preserve consistency.

想让代码一直易于管理,方法之一就是确保它的一致性。能做到一个程序员可以快速地读懂另一个程序员写的代码,这太重要了。维持统一的风格与约定,意味着我们可以更容易地通过“模式匹配”的方法去判断那些可变或不变的符号的真正意义。创建通用的、必须的惯用法及模式,可以让代码更容易被理解。有些情况下,修改某些风格与规则似乎也挺有道理的,但我们还是要尽量保持这种一致性,别随便修改。

Another issue this guide addresses is that of C++ feature bloat. C++ is a huge language with many advanced features. In some cases we constrain, or even ban, use of certain features. We do this to keep code simple and to avoid the various common errors and problems that these features can cause. This guide lists these features and explains why their use is restricted.

本指南的另一个议题关乎近乎臃肿的C++语言特性。C++是一门拥有许多高级特性的,庞大的语言。有某些情况下,我们会避免甚至是禁止使用特定的一些特性。目的在于避免这些特性通常会来的许多错误或问题。指南列出了这些特性,并且给出了我们拒绝使用它们的理由。

 

本文到此似乎可以结束了,但有读者不干了,主动抛出一个Q:“写文章的家伙,你这算‘写’文章吗?纯粹是在练习‘翻译’啊!”。确实啊,并且翻译得一点不也“信雅达”。(由此我决定节外生枝,写点编程与英语的纠结。)

我解释一下,在《向google学习良好的C++代码风格》系列里,估计也就这头篇是这样啦,因为我们想学习“代码风格”,首先得了解为什么要学习代码风格。而这一问题,经常写起来就是“语重心长”加“苦口婆心”,啰嗦上一阵,还不管用——我又扣不了你们的工资——所以简单的方法,就是原话祭出google的这方面的“background”。也不是说google出名就怎样啦!并没有说这是google内部开发的代码风格,这是google“求”,当然是相对强势地“求”要参与其C++开源项目的作者该如何写代码,所以我觉得倒更是比其内部的规定要真实可用,毕竟它要求的对象,不是公司内部可以扣工资的员工,而是全球的开发者。

后面的系列,我就会大量抛弃google在指南里对各点的阐述,用更多的文字及代码,及项目实作来解释各点,当然,这将是一个长期的过程。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息