0. 前言

版本:

4.45 (2016/1/28 翻譯中)

原作者:
Benjy Weinberger
Craig Silverstein
Gregory Eitzmann
Mark Mentovai
Tashana Landray
翻譯:
專案網頁:

0.1 譯者前言

Google 經常會發佈一些開源專案,意味著會接受來自其他程式碼貢獻者的程式碼。但是如果程式碼貢獻者的程式撰寫風格與 Google 不一致,會給程式碼閱讀者和其他程式碼提交這造成不小的困擾。Google 因此發佈了這份自己的程式撰寫風格指南,使所有提交程式碼的人都能獲知 Google 的程式撰寫風格。

翻譯初衷:

規則的作用就是避免混亂。但規則本身一定要權威,有說服力,並且是理性的。我們所見過的大部分程式撰寫規範,其內容或不夠嚴謹,或闡述過於簡單,或帶有一定的武斷性。

Google 保持其一貫的嚴謹精神,5 萬漢字的指南涉及廣泛,論證嚴密。我們翻譯該系列指南的主因也正是其嚴謹性。嚴謹意味著指南的價值不僅僅局限於它羅列出的規範,更具參考意義的是它為了列出規範而做的謹慎權衡過程。

指南不僅列出你要怎麼做,還告訴你為什麼要這麼做,哪些情況下可以不這麼做,以及如何權衡其利弊。其他團隊未必要完全遵照指南亦步亦趨,如前面所說,這份指南是 Google 根據自身實際情況打造的,適用於其主導的開源專案。其他團隊可以參照該指南,或從中汲取靈感,建立適合自身實際情況的規範。

我們在翻譯的過程中,收穫頗多。希望本系列指南中文版對你同樣能有所幫助。

我們翻譯時也是盡力保持嚴謹,但水平所限,bug 在所難免。有任何意見或建議,可與我們取得聯繫。

中文版和英文版一樣,使用 Artistic License/GPL 開源許可。

繁體中文版修訂歷史:

  • 2016-02: @welkineins 為了撰寫公司內部的程式撰寫風格,將簡體中文版作為基礎將其翻譯為繁體中文,並且修正兩岸間的用語差異,同時也進行了一些細微的敘述調整。

簡體中文版修訂歷史:

  • 2015-08:熱心的清華大學同學 @lilinsanity 完善了「類」章節以及其它一些小章節。至此,對 Google CPP Style Guide 4.45 的翻譯正式竣工。

  • 2015-07 4.45:acgtyrant 為了學習 C++ 的規範,順便重新翻譯了本 C++ 風格指南,特別是 C++11 的全新內容。排版大幅度優化,翻譯措辭更地道,添加了新譯者筆記。Google 總部 C++ 工程師 innocentim,清華大學不願意透露姓名的唐馬儒先生,大阪大學大學院情報科學研究科計算機科學專攻博士 farseerfc 和其它 Arch Linux 中文社區眾幫了譯者不少忙,謝謝他們。因為 C++ Primer 尚未完全入門,暫時沒有翻譯「類」章節和其它一些小章節。

  • 2009-06 3.133:YuleFox 的 1.0 版已經相當完善,但原版在近一年的時間裡,其規範也發生了一些變化。

    Yang.Y 與 YuleFox 一拍即合,以專案的形式來延續中文版 : Google 開源專案風格指南 - 中文版專案

    主要變化是同步到 3.133 最新英文版本,做部分勘誤和改善可讀性方面的修改,並改進排版效果。Yang.Y 重新翻修,YuleFox 做後續評審。

  • 2008-07 1.0:出自 YuleFox 的 Blog,很多地方摘錄的也是該版本。

0.2 背景

C++ 是 Google 大部分開源專案的主要程式撰寫語言。正如每個 C++ 開發者都知道的,C++ 有很多強大的特性,但這種強大不可避免的導致它走向複雜,使程式碼更容易產生 bug,難以閱讀和維護。

本指南的目的是通過詳細闡述 C++ 注意事項來駕馭其複雜性。這些規則在保證程式碼易於管理的同時,也能高效使用 C++ 的語言特性。

風格,亦被稱作可讀性,也就是指導 C++ 程式撰寫的約定。使用術語 “風格” 有些用詞不當,因為這些習慣遠不止程式碼文件格式化這麼簡單。

Google 主導的開源專案均符合本指南的規定。

注意: 本指南並非 C++ 課程,我們假定讀者已經對 C++ 非常熟悉。

0.3 目標

使程式碼易於管理的方法之一是加強程式碼一致性。讓任何開發者都可以快速讀懂你的程式碼。保持統一程式撰寫風格並遵守約定意味著可以很容易根據 “模式匹配” 規則來推斷各種標識符的含義。創建通用、必需的習慣用語和模式可以使程式碼更容易被理解。在一些情況下可能有充分的理由改變某些程式撰寫風格,但我們還是應該遵循一致性原則,盡量不這麼做。

本指南的另一個觀點是 C++ 特性的臃腫。C++ 是一門包含大量高級特性的龐大語言。某些情況下,我們會限制甚至禁止使用某些特性。這麼做是為了保持程式碼清爽,避免這些特性可能導致的各種問題。指南中列舉了這類特性,並解釋為什麼這些特性被限制使用。

Tip

待翻譯