C++編程規範(上)

來源:互聯網
上載者:User
 

第一章檔案聲明 【規則1-1 標頭檔和定義檔案的說明       在頭部聲明檔案的基本資料。1) 檔案名稱2) 簡要說明該檔案的作用3) 版本資訊,原作者和編輯作者,建立日期或最後修改日期
/********************************************************************** File: MathGraph.h ,   interface defination of CMathGraph* Abstract: CMathGraph is a class for drawing various kinds of*           math plot,histogram, etc** Current Version: 1.0* Coder: Dai Jun* Last Edited: 2006-Dec-11** First Finish: 2006-Dec-11* First Coder: Dai Jun**********************************************************************/
  【規則1-2 為了防止標頭檔被重複引用,應當用ifndef/define/endif結構產生預先處理塊。
#ifndef   MATHGRAPH_H // 防止mathgraph.h被重複引用#define   MATHGRAPH_H …………程式本文 #endif
  【規則1-3 用 #include <filename.h> 格式來引用標準庫的標頭檔(編譯器將從標準庫目錄開始搜尋)。 【規則1-4 用 #include “filename.h” 格式來引用非標準庫的標頭檔(編譯器將從使用者的工作目錄開始搜尋)。  【建議】盡量避免使用全域變數,盡量不要在標頭檔中出現象extern int value 這類聲明。若要使用全域變數,建議在獨立的標頭檔中定義以方便尋找。  第2章程式的版式空行起著分隔程式段落的作用。空行得體(不過多也不過少)將使程式的布局更加清晰。空行不會浪費記憶體,雖然列印含有空行的程式是會多消耗一些紙張,但是值得。所以不要捨不得用空行。 2.1程式碼,空行及空格 【規則2-1-1 在每個類聲明之後、每個函數定義結束之後都要加空行。
void Function1(…){ …}// 空行void Function2(…){ …}
  【規則2-1-2 在一個函數體內,邏揖上密切相關的語句之間不加空行,不同功能的程式塊之間應加空行分隔。參見樣本
//空行void Function(){   數值計算程式段 ;   //空行   數值輸出程式段;}
  【規則2-1-3 一行代碼只做一件事情,如只定義一個變數,或唯寫一條語句。這樣的代碼容易閱讀,並且方便於寫注釋。   
int width;    // 寬度int height;   // 高度int depth;    // 深度
  【規則2-1-4 if、for、while、do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}, 這樣可以防止書寫失誤。     for (initialization; condition; update){dosomething();}// 空行other();  【建議2-1-5 盡量在定義變數的同時初始化該變數(就近原則)如果變數的引用處和其定義處相隔比較遠,變數的初始化很容易被忘記。如果引用了未被初始化的變數,可能會導致程式錯誤。本建議可以減少隱患。例如int width = 10;     // 定義並初紿化width   【規則2-1-6 函數名之後不要留空格,緊跟左括弧‘(’  【規則2-1-7 ‘(’向後緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格。  【規則2-1-8 ‘,’之後要留空格,如Function(x, y, z)。如果‘;’不是一行的結束符號,其後要留空格,如for (initialization; condition; update)。  【規則2-1-9 賦值操作符、比較操作符、算術操作符、邏輯操作符、位網域作業符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前後應當加空格。但對於比較長的for, if等語句,為了緊湊可以適當去掉空格。 如for(i=0; i<10; i++) 和 if ((a<=b) && (c<=d)) 【規則2-1-10 來源程式中關係較為緊密的代碼應儘可能相鄰。
rect.length=10,//矩形的長     不良的風格char_poi=str;//顯示的文本串rect.width=5;//矩形的寬
rect.length=10;rect.width=5;// 矩形的長與寬關係較密切,放在一起。char_poi=str;
  【規則2-1-11 一元操作符如“!”、“~”、“++”、“--”、“&”(地址運算子)等前後不加空格。象“[]”、“.”、“->”這類操作符前後也不加空格    
void Func1(int x, int y, int z);          // 良好的風格
if (year >= 2000)                         // 良好的風格if ((a>=b) && (c<=d))                     // 良好的風格if(a>=b&&c<=d)                            // 不良的風格
for (i=0; i<10; i++)                      // 良好的風格for(i=0;i<10;i++)                         // 不良的風格for (i = 0; I < 10; i ++)                 // 過多的空格
x = a < b ? a : b;                        // 良好的風格x=a<b?a:b;                                // 不好的風格
int *x = &y;                              // 良好的風格 int * x = & y;                            // 不良的風格 
array[5] = 0;                             // 不要寫成 array [ 5 ] = 0;a.Function();                             // 不要寫成 a . Function();b->Function();                            // 不要寫成 b -> Function();
   2.2 對齊與拆分 【規則2-2-1 程式的分界符‘{’和‘}’應獨佔一行並且位於同一列,同時與引用它們的語句靠左對齊。  【規則2-2-2 { }之內的代碼塊在‘{’右邊數格處靠左對齊。(VC的TAB預設為4格,有些規範不建議使用TAB,因為不同編輯器TAB鍵不一致,考慮到敲空格比較煩瑣,同一用TAB=4格左右縮排,可以設定編輯器TAB值)。同一級的代碼塊要對齊。 
if (condition){… // program code}else{… // program code}
如果出現嵌套的{},則使用縮排對齊,如:     {       …          {           …          }       …}
  【規則2-2-3 程式碼最大長度宜控制在70至80個字元以內。程式碼不要過長,否則眼睛看不過來,也不便於列印。  【規則2-2-4 長運算式要在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。 
if ((very_longer_variable1 >= very_longer_variable12) && (very_longer_variable3 <= very_longer_variable14) && (very_longer_variable5 <= very_longer_variable16)){    dosomething();}
virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix,                                 CMatrix rightMatrix);
     【規則2-2-5 應當將修飾符 * 和 & 緊靠變數名, 傳回型別為指標的函數可靠近類型名 
char  *name;       int* Function(char *ch)
2.3 注釋C語言的注釋符為“/*…*/”。C++語言中,程式塊的注釋常採用“/*…*/”,行注釋一般採用“//…”。 【規則2-3-2 如果語句表達得很清楚的,則不必加註釋。否則多此一舉,令人厭煩。 有效注釋應該占程式文字量的25%左右  【規則2-3-3 邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。  【規則2-3-4 盡量避免在注釋中使用縮寫,特別是不常用縮寫。  【規則2-3-5 注釋的位置應與被描述的代碼相鄰,上方或右方,不可放在下方。   實現在某一功能的長程式碼片段開始處註明程式碼片段功能,用//號佔位以方便尋找 
void Func(){...//開始繪圖////////////////////////////      …… 長程式碼片段 //計算矩陣///////////////////////////          ......    }
 函數定義處開頭要注釋函數名,函數功能和輸入輸出參數。簡單明了的函數可以只注釋功能。函式宣告處上方簡要說明函數功能。 
/****************************************************** ComplexFunc 函數功能描述......* 輸入參數: para1 參數1的意義*                   1 若para為1的意義 2 若para為2的意義*            para2 參數2的意義* 傳回值     char*   傳回值的意義*******************************************************/char* ComplexFunc(int para1, char *para2){ ...}
/************************************************************ 設定para*************************************************************/void SimpleFunc(int para){   m_para = para;}
  【規則2-3-6 當域內代碼比較多,特別是有多重嵌套時,應當在一些段落的結束處加註釋,便於閱讀和檢查。if (a!=0){  … 長程式碼片段} //end if a else{  … 長程式碼片段}//end else  2.4 類的聲明版式 【規則2-4-1 一般先定義介面函數,再定義成員變數,先public,後private. 把成員函數分類成:構造/釋構,屬性,行為. 在函式宣告的上方和成員變數右方加上功能注釋,
 class CmathGraph{    public:        CmathGraph()        ~CmathGraph()   //Attribute   public:              //設定DC        void SetDC(CDC *pDC);        //擷取繪圖區域大小        CSize GetSize();   //Operation   public:        //在螢幕輸出文本         void DrawText(CString str);   protected:        int member1;   //member1的作用        char member2; //member2的作用}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.