9. 規(guī)則特例

2018-02-24 15:11 更新

前面說明的編程習(xí)慣基本都是強(qiáng)制性的. 但所有優(yōu)秀的規(guī)則都允許例外, 這里就是探討這些特例.

9.1. 現(xiàn)有不合規(guī)范的代碼

Tip

對于現(xiàn)有不符合既定編程風(fēng)格的代碼可以網(wǎng)開一面.

當(dāng)你修改使用其他風(fēng)格的代碼時, 為了與代碼原有風(fēng)格保持一致可以不使用本指南約定. 如果不放心可以與代碼原作者或現(xiàn)在的負(fù)責(zé)人員商討, 記住, 一致性 包括原有的一致性.

9.2. Windows 代碼

Tip

Windows 程序員有自己的編程習(xí)慣, 主要源于 Windows 頭文件和其它 Microsoft 代碼. 我們希望任何人都可以順利讀懂你的代碼, 所以針對所有平臺的 C++ 編程只給出一個單獨(dú)的指南.

如果你習(xí)慣使用 Windows 編碼風(fēng)格, 這兒有必要重申一下某些你可能會忘記的指南:

  • 不要使用匈牙利命名法 (比如把整型變量命名成 iNum). 使用 Google 命名約定, 包括對源文件使用 .cc 擴(kuò)展名.
  • Windows 定義了很多原生類型的同義詞 (YuleFox 注: 這一點(diǎn), 我也很反感), 如 DWORD, HANDLE 等等. 在調(diào)用 Windows API 時這是完全可以接受甚至鼓勵的. 但還是盡量使用原有的 C++ 類型, 例如, 使用 const TCHAR * 而不是 LPCTSTR.
  • 使用 Microsoft Visual C++ 進(jìn)行編譯時, 將警告級別設(shè)置為 3 或更高, 并將所有 warnings 當(dāng)作 errors 處理.
  • 不要使用 #pragma once; 而應(yīng)該使用 Google 的頭文件保護(hù)規(guī)則. 頭文件保護(hù)的路徑應(yīng)該相對于項目根目錄 (yospaly 注: 如 #ifndef SRC_DIR_BAR_H_, 參考 #define 保護(hù) 一節(jié)).
  • 除非萬不得已, 不要使用任何非標(biāo)準(zhǔn)的擴(kuò)展, 如 #pragma__declspec. 允許使用 __declspec(dllimport)__declspec(dllexport); 但你必須通過宏來使用, 比如 DLLIMPORTDLLEXPORT, 這樣其他人在分享使用這些代碼時很容易就去掉這些擴(kuò)展.

在 Windows 上, 只有很少的一些情況下, 我們可以偶爾違反規(guī)則:

  • 通常我們 禁止使用多重繼承, 但在使用 COM 和 ATL/WTL 類時可以使用多重繼承. 為了實(shí)現(xiàn) COM 或 ATL/WTL 類/接口, 你可能不得不使用多重實(shí)現(xiàn)繼承.
  • 雖然代碼中不應(yīng)該使用異常, 但是在 ATL 和部分 STL(包括 Visual C++ 的 STL) 中異常被廣泛使用. 使用 ATL 時, 應(yīng)定義 _ATL_NO_EXCEPTIONS 以禁用異常. 你要研究一下是否能夠禁用 STL 的異常, 如果無法禁用, 啟用編譯器異常也可以. (注意這只是為了編譯 STL, 自己代碼里仍然不要含異常處理.)
  • 通常為了利用頭文件預(yù)編譯, 每個每個源文件的開頭都會包含一個名為 StdAfx.hprecompile.h 的文件. 為了使代碼方便與其他項目共享, 避免顯式包含此文件 (precompile.cc), 使用 /FI 編譯器選項以自動包含.
  • 資源頭文件通常命名為 resource.h, 且只包含宏的, 不需要遵守本風(fēng)格指南.
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號