原文地址: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集成編輯環境的可見區域之內),如有
超過,則換行處理。
--
運用之妙,存乎一心。
Visual C++ 編程風格守則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.