本文翻譯自 1996 年經典《Elements of Programming Style — C++ Style Guide》,雖年代久遠,但核心原則 (一致性、可讀性、可維護性) 至今仍是現代 C++ 編碼規範基石。內容涵蓋檔案組織、命名慣例、空白與縮排、換行規則、註解風格,附完整頭檔與實作檔範本。
.h 副檔名,含類別/結構/聯合宣告、列舉、#define, typedef.cc (UNIX) / .cpp (Windows),含函數/方法實作| 符號 | 英文稱呼 | 建議中文 |
|---|---|---|
| { } | open/close brace, curly | 左/右大括號 |
| ( ) | open/close parenthesis, paren | 左/右括號 |
| [ ] | open/close bracket | 左/右中括號 |
| . | period, dot | 句點 |
| ! | exclamation point, bang, not | 驚嘆號、非 |
| | | bar, vertical-bar, or | 管道符、或 |
| & | ampersand, and, reference | 與、參考、取址 |
| * | asterisk, multiply, star, pointer | 星號、乘號、指標 |
| / | slash, divide | 斜線、除號 |
| // | slash-slash, comment | 雙斜線、註解 |
| # | pound | 井號 |
| \ | backslash, escape | 反斜線、跳脫字元 |
| ~ | tilde | 波浪號、按位取反 |
char 讀音建議「charcoal」首音節,或 "care"/"car"。
| 命名風格 | 模式 | 適用對象 |
|---|---|---|
| interspersed_underscores | lower_case_with_underscores | 列舉項目 |
| lowercaseMixedCapital | camelCase | 變數、參數、成員變數 |
| CapitalMixedCapital | PascalCase | 類別、型別、函數、方法、命名空間 |
| ALL_UPPERCASE | UPPER_SNAKE_CASE | 巨集常數、#define |
enumeration_item_name (列舉)variableName (變數)TypeName, ClassName, MethodName() (型別/類別/方法)UnixFileName.cc (Unix 檔名)dosfn.cpp (DOS/Windows 檔名,全小寫)POUND_DEFINES (巨集)if/while/for 後無大括號時,下一行縮進 2 空格public:, case 等冒號結尾行,反向縮進 2 空格if, else, class, struct 前後各 1 空格! 外)int *ptr;, int &ref; 符號前後各 1 空格p = * ptr;)if ( condition ) 左括號後 1 空格class, struct, union, enum, method, function 的左大括號後換行if, else, do, for, while, switch 的左大括號後不換行,僅 1 空格// 註解內容 (雙斜線後 1 空格)// Initialize member data)// MODULE NAME: ClassName.h
// PROJECT: CS1344-1,2 Course Notes
// AUTHOR: Neill Kipp
// DATE: January 1, 1996
// DESCRIPTION: C++ class declaration style examples
#ifndef ClassName_h
#define ClassName_h
#include "super.h"
#include "other.h"
enum OverflowState {
no_overflow,
overflow_occurred, // 尾端逗號便於增刪項目
};
class ClassName {
int memberData; // 說明置於上方或行尾
public:
ClassName(); // 建構子初始化成員
~ClassName(); // 解構子保證清理
OverflowState IncrementMemberVariable(int howMuch); // 回傳溢位狀態
void ShowOverflow(OverflowState overflow); // 顯示溢位訊息
};
#endif
// MODULE NAME: ClassName.cc
// PROJECT: CS1344-1,2 Course Notes
// AUTHOR: Neill Kipp
// DATE: January 1, 1996
// DESCRIPTION: C++ class implementation style examples
#include "ClassName.h"
ClassName::ClassName() {
memberData = 0; // 先寫註解,再寫程式碼
}
OverflowState
ClassName::IncrementMemberVariable(int howMuch) {
if (TOO_BIG - memberVariable > howMuch) {
return overflow_occurred;
} else {
return no_overflow;
}
}
void
ClassName::ShowOverflow(OverflowState overflow) {
switch (overflow) {
case no_overflow:
cout << "No overflow occurred.\n";
break;
case overflow_occurred:
cout << "Warning: overflow occurred.\n";
break;
}
}
// for 迴圈空白與縮排
for (whichItem = 0; whichItem < BIG_NUMBER; whichItem++) {
DoSomething(whichItem);
}
// while 迴圈:! 後無空格
while (!SemaphoreOK()) {
DoWaitForSemaphore(LONG_TIME);
}
clang-format 自動化格式化、.editorconfig 跨 IDE 一致性snake_case (變數/函數)、PascalCase (類別/型別)、kConstantName (常數)/// 格式支援文件自動生成.hpp、模組介面 .ixx (C++20 Modules)這份 1996 年的指南或許在細節上顯得古老,但它確立的「可讀性優先、機械化排版、註解即文件」工程文化,正是現代軟體工程規範的源頭之一。