Visual C++ 編程風格守則

 原文地址:http://topic.csdn.net/t/20020105/22/459482.html 
  1               引言  
  1.1         本文目的   
  隨着越來越多的項目需要Visual   C++來編寫,爲了便於各位項目經理、程序員之前交流  
  項目源程序,並且保證源程序的可讀性,特制定本《編程風格守則》,本文的讀者爲項  
  目經理、程序員,以期在編碼過程之中,保持一致的風格,有利於軟件工程項目的推行  
  。本文在編寫上力求求大同、存小異,在編程風格上分爲兩類,一類爲強制風格,意爲  
  一定需要遵守,一類爲推薦風格,意爲希望程序員在編碼時按照這樣的風格。  
  1.2         背景  
  在軟件工程領域,源程序的風格統一標誌着可維護性、可讀性,是軟件項目的一個重要  
  組成部分。而目前還沒有成文的編碼風格文檔,以致於很多時候,程序員沒有一個共同  
  的標準可以遵守,編碼風格各異,程序可維護性差、可讀性也很差。  
  目前在編碼上也有許多相關的風格約定,包括匈牙利命名法(一種變量的取名辦法)、  
  類MFC取名方式,但是針對基於某種編譯器的項目完整編程風格守則,目前還是比較少,  
  或者說比較零散。  
  1.3         術語  
  系統:指一個軟件工程項目,是一個系統;  
  項目:指一個Visual   C++項目;  
  Hungarian   naming:  
  MFC:Microsoft   Foundation   Class   Library;  
  發信人:   hollywood   (好萊塢◎黑暗聖壇武士),   信區:   VisualC  
  標     題:   Visual   C++   編程風格守則(轉自白雲黃鶴vc版)  
  Visual   C++   編程風格守則  
  1               引言  
  1.1         本文目的  
  隨着越來越多的項目需要Visual   C++來編寫,爲了便於各位項目經理、程序員之前交流  
  項目源程序,並且保證源程序的可讀性,特制定本《編程風格守則》,本文的讀者爲項  
  目經理、程序員,以期在編碼過程之中,保持一致的風格,有利於軟件工程項目的推行  
  。本文在編寫上力求求大同、存小異,在編程風格上分爲兩類,一類爲強制風格,意爲  
  一定需要遵守,一類爲推薦風格,意爲希望程序員在編碼時按照這樣的風格。  
  1.2         背景  
  在軟件工程領域,源程序的風格統一標誌着可維護性、可讀性,是軟件項目的一個重要  
  組成部分。而目前還沒有成文的編碼風格文檔,以致於很多時候,程序員沒有一個共同  
  的標準可以遵守,編碼風格各異,程序可維護性差、可讀性也很差。  
  目前在編碼上也有許多相關的風格約定,包括匈牙利命名法(一種變量的取名辦法)、  
  類MFC取名方式,但是針對基於某種編譯器的項目完整編程風格守則,目前還是比較少,  
  或者說比較零散。  
  1.3         術語  
  系統:指一個軟件工程項目,是一個系統;  
  項目:指一個Visual   C++項目;  
  Hungarian   naming:  
  發信人:   deliver   (自動發信系統),   信區:   VisualC  
  標     題:   VisualC   版版務   GrandElf   離任通告  
                  經站務委員會討論:  
                  同意   GrandElf   辭去   VisualC   版的版務職務。  
  發信人:   hollywood   (好萊塢◎黑暗聖壇武士),   信區:   VisualC  
  標     題:   Visual   C++   編程風格守則(轉自白雲黃鶴vc版)  
  Visual   C++   編程風格守則  
  1               引言  
  1.1         本文目的  
  隨着越來越多的項目需要Visual   C++來編寫,爲了便於各位項目經理、程序員之前交流  
  項目源程序,並且保證源程序的可讀性,特制定本《編程風格守則》,本文的讀者爲項  
  目經理、程序員,以期在編碼過程之中,保持一致的風格,有利於軟件工程項目的推行  
  。本文在編寫上力求求大同、存小異,在編程風格上分爲兩類,一類爲強制風格,意爲  
  一定需要遵守,一類爲推薦風格,意爲希望程序員在編碼時按照這樣的風格。  
  1.2         背景  
  在軟件工程領域,源程序的風格統一標誌着可維護性、可讀性,是軟件項目的一個重要  
  組成部分。而目前還沒有成文的編碼風格文檔,以致於很多時候,程序員沒有一個共同  
  的標準可以遵守,編碼風格各異,程序可維護性差、可讀性也很差。  
  目前在編碼上也有許多相關的風格約定,包括匈牙利命名法(一種變量的取名辦法)、  
  類MFC取名方式,但是針對基於某種編譯器的項目完整編程風格守則,目前還是比較少,  
  或者說比較零散。  
  1.3         術語  
  系統:指一個軟件工程項目,是一個系統;  
  項目:指一個Visual   C++項目;  
  Hungarian   naming:  
  MFC:Microsoft   Foundation   Class   Library;  
  1.4         參考資料  
  MSDN中有關MFC編寫風格的文章,互聯網上一些有關編寫風格的資料(http://www.cs.c  
  lemson.edu/~kjhay/CpSc372/Week3/Week3.PPT)。  
  2               概述  
  每位程序員都有自己的編程風格,因爲每位程序員都有自己的學習過程,就象每個人的  
  個性一樣,所以編程風格是風彩各異、百花齊放;而從軟件工程理論、實踐來看,現代  
  軟件是多人合作的結晶,編程風格是否統一,直接關係到軟件項目的可讀性、可維護性  
  、培訓,繼而對軟件開發成本有着直接的關係,編程風格一致,軟件項目易培訓,其它  
  人員接手老項目的時間縮短,便於程序員之間的交流。編程風格混亂,則其它人員接手  
  老項目時間增長,同時隨着項目的不斷開發,項目或者單個源程序文件內有着多種編程  
  風格,這樣不利於整個項目的開展以及程序員之間的交流。  
  本文在參考業界已有的編碼風格的基礎上,描述了一個基於Visual   C++編譯器的項目風  
  格,力求一種統一的編程風格,並從項目風格、代碼文件風格、函數編寫風格、變量風  
  格、註釋風格幾個方面進行闡述。  
  3               項目風格  
  項目風格指的是針對整個項目,包括項目目錄設置、相關庫文件設置、Visual   Studio集  
  成環境設置等等的習慣約定。具體有如下風格守則:  
  3.1         項目取名  
  在VC之中,項目名爲最後可執行文件名,所以項目名最好以最終的可執行文件名一致。  
  3.2         項目目錄設置  
  爲保證VC項目的備份方便、快捷,可將所有該項目有關的文件全部放到統一的目錄之下  
  ,爲每個項目在該目錄之下建立一個目錄,項目之間的公共部分建立在public目錄之下  
  ,項目所需要的基礎庫根據所需要的基礎庫數目分別建立不同的目錄,項目相關的測試  
  程序都統一放在TEST目錄之下。下表顯示了一個軟件工程PSS系統的目錄設置表:  
  PSS系統簡介:  
  PSS系統有兩個模塊PSS_mod1和PSS_mod2,兩個模塊有一部分共用代碼,在工程開發過程  
  之中編寫了三個測試程序PSS_TEST1、PSS_TEST2、PSS_TEST3,PSS系統開發過程之中用  
  到了第三方公用模塊Third_Mod,則該系統的目錄設置如下:  
  一級目錄         二級目錄         三級目錄         備註  
  WORK         PSS_mod1         Debug       VC集成環境生成的調試版本目錄  
                  Release   VC集成環境生成的發行版本目錄  
                  Res   VC集成環境生成的資源文件目錄  
                  Include   所屬mod1的頭文件  
                  Source     所屬mod2的頭文件  
          PSS_mod2         Debug       VC集成環境生成的調試版本目錄  
                  Release   VC集成環境生成的發行版本目錄  
                  Res   VC集成環境生成的資源文件目錄  
                  Include   所屬mod1的頭文件  
                  Source     所屬mod2的頭文件  
          PUBLIC     Include   Mod1和mod2公用的頭文件  
                  Source     Mod1和mod2公用的源代碼文件  
                  Lib   Mod1和mod2公用的庫文件  
          TEST         PSS_Test1       測試項目一  
                  PSS_Test2       測試項目三  
                  PSS_Test3       測試項目三  
          Third_Mod               第三方公用模塊  
  3.3         集成環境內的項目目錄設置  
  每個項目在VC編成編輯環境的設置都採用相對路徑的設置,不可採用絕對路徑,保證其  
  備份到光盤設備後,恢復到硬盤後,不需要再過多的設置就可直接編譯。同樣在用#inc  
  lude   語句時不要太多的目錄搜索,如下所示:  
  #include   "../../../somehead.h"  
  改成:  
  #include   "somehead.h"  
  然後在項目設置(Project   Setting)中加入該頭文件的所在目錄。  
  3.4         集成環境內的模塊劃分  
  在VC項目集成環境之下,Project視圖中的FileView視圖,對於每個項目的子模塊都建立  
  相應的文件夾,以對不同的子模塊進行區分,比如說PSS_mod1就可建立如下幾個模塊:  
  核心數據結構、底層通用平臺、界面處理模塊、底層工作線程,其中底層通用平臺又可  
  劃分爲CJ60開發包、RCC通訊平臺等等。  
  3.5         項目修改記錄追蹤  
  每一個VC項目必須存在Changes.Log,用以記載項目產生以來所有的改動,其格式必須如  
  下:  
  日期:             2000/4/28  
  修改人:         程曠  
  修改主題:     底層通訊由於MODEM響應代碼而引起的不穩定現象  
  相關修改文件:   CommLayer.cpp  
  修改內容詳細描述:  
  另外充分利用Visual   C++自動生成的Readme.txt文件來記載項目相關的信息。  
  4               文件風格  
  4.1         文件生成  
  對於規範的VC派生類,儘量用Class   Wizard生成文件格式,避免用手工製作的頭文件/實  
  現文件。  
  無論是MFC源文件還是由App   Wizard生成的文件,會發現在這些類中有以下注釋;  
  //   Constructors  
  //   Attributes  
  //   Operations  
  //   Overridables  
  //   Implementation  
  每一次類都至少有一個//Implementation,在不同的位置MFC做不同的處理,在編寫代碼  
  時最好與MFC這種風格一致。  
  4.2         文件頭部註釋  
  文件頭部註釋主要是表明該文件的一些信息,其格式如下:  
  ////////////////////////////////////////////////////////////////////////////  
  ///////////////  
  //   文件名:  
  //   創建者:  
  //   創建時間:  
  //   內容描述:  
  ////////////////////////////////////////////////////////////////////////////  
  ///////////////  
  4.3         空行約定  
  文件之中不得存在無規則的空行,比如說連續十個空行,一般來講函數與函數之前的空  
  行爲2-3行,在函數體內部,在邏輯上獨立的兩個函數塊可適當空行,一般爲1-2行。  
  4.4         文件規格化功能鍵  
  源文件在編寫完畢時,Visual   C++提供Alt+F8功能鍵,進行文件規格化,常使用該按鍵  
  可使得文件保持規格化(注,Alt+F8功能鍵對連續兩個CASE語句則會發生處理錯誤,不  
  能規格化)。  
  5               函數風格  
  5.1         函數註釋  
  ClassWizard自動生成的函數,如消息響應函數,則不必太多的註釋和解釋;  
  對於自行編寫的函數,若是系統關鍵函數,則必須在函數實現部分的上方標明該函數的  
  信息,格式如下:  
  ////////////////////////////////////////////////////////////////////////////  
  ///////////////  
  //   函數名:  
  //   編寫者:  
  //   參考資料:  
  //   功     能:  
  //   輸入參數:  
  //   輸出參數:  
  //   備     注:  
  ////////////////////////////////////////////////////////////////////////////  
  ///////////////  
  5.2         代碼縮進  
  每一個嵌套的函數塊,使用一個TAB縮進(可以設定爲3個空格),大括號必須放在條件  
  語句的下一行,單獨成一行,便於匹對:  
  if(condition)  
  {  
          while(condition)  
          {  
          }  
  }  
  6               變量風格  
  變量儘量採用匈牙利命名法,同時結合VC的原則;一般情況下,變量的取名方式爲:  
  >  
  有關項目的全局變量必須用g_開始,類成員變量用m_,局部變量若函數較大則可考慮用  
  l_用以顯示說明其是局部變量。  
  前綴         類型         例子  
  g_     Global   Variable   g_Servers  
  C       Class   or   structure     CDocument,   CPrintInfo  
  C       Class   or   structure     CDocument,   CPrintInfo  
  m_     Member   variable   m_pDoc,   m_nCustomers  
  Visual   C++常用前綴列表:  
  前綴         類型         描述         例子  
  ch     char         8-bit   character   chGrade  
  ch     TCHAR       16-bit   character   if   _UNICODE   is   defined   chName  
  b       BOOL         Boolean   value       bEnabled  
  n       int   Integer   (size   dependent   on   operating   system)         nLength  
  n       UINT         Unsigned   value   (size   dependent   on   operating   system)   nLength  
  w       WORD         16-bit   unsigned   value       wPos  
  l       LONG         32-bit   signed   integer       lOffset  
  dw     DWORD       32-bit   unsigned   integer   dwRange  
  p       *       Ambient   memory   model   pointer         pDoc  
  lp     FAR*         Far   pointer   lpDoc  
  lpsz         LPSTR       32-bit   pointer   to   character   string     lpszName  
  lpsz         LPCSTR     32-bit   pointer   to   constant   character   string   lpszName  
  lpsz         LPCTSTR   32-bit   pointer   to   constant   character   string   if   _UNICODE   is  
  defi  
  ned   lpszName  
  h       handle     Handle   to   Windows   object         hWnd  
  lpfn         (*fn)()   callbackFar   pointer   to   CALLBACK   function         lpfnAbort  
  Windows對象名稱縮寫:  
  Windows   對象         例子變量         MFC類       例子對象  
  Windows   對象         例子變量         MFC類       例子對象  
  HWND         hWnd;       CWnd*       pWnd;  
  HDLG         hDlg;       CDialog*         pDlg;  
  HDC   hDC;         CDC*         pDC;  
  HGDIOBJ   hGdiObj;         CGdiObject*   pGdiObj;  
  HPEN         hPen;       CPen*       pPen;  
  HBRUSH     hBrush;   CBrush*   pBrush;  
  HFONT       hFont;     CFont*     pFont;  
  HBITMAP   hBitmap;         CBitmap*         pBitmap;  
  HPALETTE         hPalette;       CPalette*       pPalette;  
  HRGN         hRgn;       CRgn*       pRgn;  
  HMENU       hMenu;     CMenu*     pMenu;  
  HWND         hCtl;       CStatic*         pStatic;  
  HWND         hCtl;       CButton*         pBtn;  
  HWND         hCtl;       CEdit*     pEdit;  
  HWND         hCtl;       CListBox*       pListBox;  
  HWND         hCtl;       CComboBox*     pComboBox;  
  Visual   C++常用宏定義命名列表:  
  前綴         符號類型         符號例子         範圍  
  IDR_         標識多個資源共享的類型     IDR_MAINFRAME       1   to   0x6FFF  
  IDD_         對話框資源(Dialog)     IDD_SPELL_CHECK   1   to   0x6FFF  
  HIDD_       基於對話框的上下文幫助(Context   Help)         HIDD_SPELL_CHECK         0x20001  
  to   0x26F  
  to   0x26F  
  F  
  IDB_         位圖資源(Bitmap)         IDB_COMPANY_LOGO         1   to   0x6FFF  
  IDC_         光標資源(Cursor)         IDC_PENCIL     1   to   0x6FFF  
  IDI_         圖標資源(Icon)     IDI_NOTEPAD   1   to   0x6FFF  
  ID_IDM_   工具欄或菜單欄的命令項     ID_TOOLS_SPELLING       0x8000   to   0xDFFF  
  HID_         命令上下文幫助(Command   Help   context)         HID_TOOLS_SPELLING     0x18000  
  to   0x1D  
  FFF  
  IDP_         消息框提示文字資源     IDP_INVALID_PARTNO     8   to   0xDFFF  
  HIDP_       消息框上下文幫助(Message-box   Help   context)     HIDP_INVALID_PARTNO  
  0x30008  
    to   0x3DFFF  
  IDS_         字符串資源(String)     IDS_COPYRIGHT       1   to   0x7FFF  
  IDC_         對話框內的控制資源(Control)   IDC_RECALC     8   to   0xDFFF  
  7  
  註釋風格  
  單行註釋用雙斜槓進行註釋;  
  多行註釋用/*   */進行註釋;  
  在封存的某一版本的源代碼之中不得存在由於調試而留下的大篇的註釋。  
  註釋一行不要太多,一般60個字符以內(保證VC集成編輯環境的可見區域之內),如有  
  --  
  運用之妙,存乎一心。  
  ID_IDM_   工具欄或菜單欄的命令項     ID_TOOLS_SPELLING       0x8000   to   0xDFFF  
  ※   來源:·北大未名站   bbs.pku.edu.cn·[FROM:   162.105.31.222]  
  [閱讀文章]     回信   R   │   結束   Q,←   │上一封   ↑│下一封   ,↓│主題閱讀   ^X或p  
  IDP_         消息框提示文字資源     IDP_INVALID_PARTNO     8   to   0xDFFF  
  HIDP_       消息框上下文幫助(Message-box   Help   context)     HIDP_INVALID_PARTNO  
  0x30008  
    to   0x3DFFF  
  IDS_         字符串資源(String)     IDS_COPYRIGHT       1   to   0x7FFF  
  IDC_         對話框內的控制資源(Control)   IDC_RECALC     8   to   0xDFFF  
  7  
  註釋風格  
  單行註釋用雙斜槓進行註釋;  
  多行註釋用/*   */進行註釋;  
  在封存的某一版本的源代碼之中不得存在由於調試而留下的大篇的註釋。  
  註釋一行不要太多,一般60個字符以內(保證VC集成編輯環境的可見區域之內),如有  
  超過,則換行處理。  
  --  
  運用之妙,存乎一心。  

發佈了7 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章