首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

高質量 C++/C 編程指南核心筆記(一)

     編輯:關於C語言

高質量 C++/C 編程指南核心筆記(一)

強烈推薦林銳博士《高質量 C++/C 編程指南》,百頁精華,受益匪淺。以下為個人閱讀精華整理。

頭文件的作用

  1. 調用庫功能:源碼不公開時,提供頭文件與二進制庫,用戶按接口聲明調用,無需關心實現。
  2. 加強類型安全檢查:實現與聲明不一致時編譯器報錯,大幅減輕調試負擔。

extern 置於變量/函數前,聲明其定義在別處,提示編譯器鏈接時去其他模塊尋找。

代碼排版規範

空行

  • 類聲明後、函數定義末加空行。
  • 函數體內:邏輯緊密語句不空行,其餘處加空行分隔。

代碼行

  • 一行只做一件事(如只定義一個變量或寫一條語句),便於閱讀與註釋。
  • if/for/while/do 獨佔一行,執行語句不緊跟其後,無論多少語句都要加 {},防書寫失誤。
  • 盡可能在定義變量時同時初始化(就近原則)。

行內空格

  • 關鍵字後留空格(const、if、for 等),函數名後不留空格(緊跟 ()。
  • , ; 後留空格;二元運算符(= + - * / % && || << ^ 等)前後加空格;一元運算符前後不加。
  • [] . -> 等操作符前後不加空格。
  • 長 for/if 語句為緊湊可適當減少空格。

長行拆分

行長控制在 70-80 字符。在低優先級運算符處換行,運算符置於新行行首,新行適當縮進。

註釋規範

  • 註釋是代碼「提示」而非文檔,不可喧賓奪主,風格統一。
  • 邊寫代碼邊註釋,修改代碼同步更新註釋,廢棄註釋及時刪除。
  • 避免使用不常見縮寫。
  • 註釋位置緊鄰代碼(上方或右方),不可置於下方。
  • 多重嵌套段落末加註釋,便於閱讀。

類的版式

  1. 數據優先:private 數據在前,public 函數在後,關注內部結構。
  2. 行為優先:public 接口在前,private 數據在後,關注提供何種服務。建議採用此方式。

命名共性規則

  • 標識符直觀可讀、望文知意,長度符合「最短長度 && 最大信息量」原則。
  • 風格與作業系統/開發工具一致:Windows 用 PascalCase(AddChild),Unix 用 snake_case(add_child),嚴禁混用。
  • 變量名用「名詞」或「形容詞+名詞」;全局函數用「動詞」或「動賓結構」。
  • 避免名字中出現數字編號(Value1),除非邏輯確需編號。

Windows 應用命名規則

  • 類名/函數名:大寫字母開頭單詞組合(PascalCase)。
  • 變量/參數:小寫字母開頭單詞組合(camelCase)。
  • 常量:全大寫,下劃線分隔單詞。
  • 靜態變量:前綴 s_。
  • 全局變量(不得已時):前綴 g_。
  • 類數據成員:前綴 m_,避免與參數同名。
  • 庫接口:加反映軟件性質的前綴,防衝突。

if 語句技巧

  • 浮點數嚴禁用 ==/!= 比較。用 fabs(x) <= EPSILON 判斷近似相等。
  • 防誤賦值技巧:if (NULL == p),若誤寫 = 編譯器報錯(NULL 不可賦值)。
  • if/else/return 組合優化:
    不良:if (cond) return x; else return y;
    優化:if (cond) return x; return y; 或三元運算符 return cond ? x : y;

循環效率與 switch/goto

  • 循環使用頻率:for > while > do。提高效率核心是降低循環體複雜度。
  • 多重循環:最長循環放最內層,最短放最外層,減少 CPU 跨層切換。
  • switch 必保留 default: break;,防他人誤以為遺漏。
  • goto 主張少用、慎用,非禁用。

const vs #define

  • const 有類型,編譯器類型檢查;#define 純文本替換,無類型檢查,易產生邊際效應。
  • 調試器可調試 const 常量,不可調試宏常量。
  • C++ 中僅用 const,不用宏常量。

類中的常量

const 數據成員僅在對象生存期內為常量,類層面可變(不同對象值可不同)。
錯誤:類聲明中初始化 const int SIZE = 100;(對象未創建時編譯器不知值)。
正確:構造函數初始化列表初始化:A(int size) : SIZE(size) {}。

若需整個類共享的編譯期常量,用 enum:enum { SIZE1 = 100, SIZE2 = 200 };。
優點:不佔對象存儲、編譯期求值。缺點:隱含類型為整數,無法表示浮點數(如 PI)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved