C++代碼書寫規範——給新手程序員的一些建議

代碼就是程序員的面子,不管是在工做中在電腦上寫程序代碼仍是在面試時在紙上寫演示代碼咱們都但願寫出整潔,優雅的代碼。特別在工做中當咱們碰到須要維護別人的代碼,或者是多人蔘與一個項目你們一塊兒寫代碼的時候,若是碰到一些醜陋的代碼,咱們還要看懂而且修改它的時候,那種難受,確定會讓咱們回想起多年之前本身仍是新手程序員的時候,寫下的那些醜陋的代碼,而且深深內疚於將它們留給了咱們的後繼者,不知道他們和它們是否還安好。因此,強調代碼的規範性,寫出整潔,優雅,可讀性高的代碼應該是成爲一個合格的程序員的第一步。這裏我就拋磚引玉,給你們一些關於C++代碼規範性的一些建議。程序員

1、關於添加空格和空行的一些建議

寫代碼的時候添加良好風格的空格和空行可使代碼看上去更整潔,佈局更清晰。面試

1.空格

  • 建議一:函數名以後不要留空格,緊跟左括號‘ (’,以與關鍵字區別。
  • 建議二:象 iffor、 **while **等關鍵字以後應留一個空格再跟左括號‘ (’,以突出關鍵字。
  • 建議三:‘,’以後要留空格。在for語句中的‘;’其後要留空格,如 for (i=0; i<5; i++)。
  • 建議四:對於表達式比較長的 **for **語句和 **if **語句,爲了緊湊起見能夠適當地去掉一些空格。
  • 建議五:賦值操做符、比較操做符、算術操做符、邏輯操做符、位域操做符,如「 =」、「 +=」 「>=」、「 <=」、「 +」、「 *」、「 %」、「 &&」、「 <<」、 「 ^」等二元操做符的先後應當加空格。
  • 建議六:一元操做符如「 !」、「 ~」、「 ++」、「 --」、「 &」(地址運算符)等先後不加空格。

下面這段代碼就會顯得不優雅,看着有些彆扭。函數

//很差的風格
void func (int a,int b,int c,int d)
{
    if(a>=0)
    {
        if(a>=b&&c>=d)
        {
            int * x = & a; 
            ...//doSomeThing();
        }
    }
}

咱們但願將它改成這樣。佈局

//良好的風格
void func(int a, int b, int c, int d)//建議一,建議三
{
    if (a >= 0)//建議二,建議五
    {
        if ((a>=b) && (c>=d))//建議四
        {
            int *x = &a; //建議六
            ...//doSomeThing();
        }
    }
}

還有這樣的for語句for (i = 0; i < 5; i ++),就屬於空格濫用了,應該改成for (i=0; i<5; i++)spa

2.空行

  • 建議一:在實現函數時,函數與函數之間應加空行。
  • 建議二:在一個函數體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行。

當程序中沒有空行時是這樣的。指針

void func1()
{
    while (condition)
    {
        ...//doSomeThing();
        if (condition)
        {
            ...//doSomeThingRelated();
        }
        else
        {
            ...//doSomeThingRelated();
        }
        ...//doSomeThing();
    }
}
void func2()
{
    ...//doSomeThing();
}

而良好的空行不緊能使代碼看上去更整潔,代碼邏輯也會更清晰。代碼規範

//良好的風格
void func1()
{
    while (condition)
    {
        ...//doSomeThing();

        if (condition)
        {
            ...//doSomeThingRelated();
        }
        else
        {
            ...//doSomeThingRelated();
        }

        ...//doSomeThing();
    }
}

void func2()
{
    ...//doSomeThing();
}

2、關於代碼行格式的一些建議

  • 建議一:一行代碼只作一件事情
  • 建議二:長表達式要在低優先級操做符處拆分紅新行,操做符放在新行之首 (以便突出操做符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。
//很差的風格
void func()
{
    int veryVeryLongWidth, veryVeryLongHeight;
    if ((veryVeryLongWidth > veryVeryLongHeight) || (veryVeryLongWidth < veryVeryLongHeight))doSomeThing();
}

過長的代碼行不管是書寫仍是閱讀對人來講都不是一個美好的體驗,因此咱們建議以上代碼要這樣寫。code

//良好的風格
void func()
{
    int veryVeryLongWidth; 
    int veryVeryLongHeight;
    if ((veryVeryLongWidth > veryVeryLongHeight)
      || (veryVeryLongWidth < veryVeryLongHeight))
    {
        doSomeThing();
    }
}

3、關於命名的一些建議

  • 建議一:變量,函數,文件命名應該具備描述性,最好採用英文單詞或其組合(不要使用拼音,或者無心義的abc之類的,除了像for (i=0; i<5; i++)中的i這樣的),以便記憶和閱讀。
  • 建議二:類名和函數名用大寫字母開頭的單詞組合而成。
    例如:
class Book; 
class ReadBook; 
void Draw(); 
void DrawImage();
  • 建議三:變量和參數用小寫字母開頭的單詞組合而成。
    例如:
int value;
void SetValueMode(int valueMode);
  • 建議四:常量全用大寫的字母,用下劃線分割單詞。
    例如:
const int MAX = 100;
const int MAX_LENGTH = 100;
  • 建議五:全局變量加前綴 g_(表示 global)。靜態變量加前綴 s_(表示 static)。類的成員變量加前綴 m_(表示 member)。
    例如:
int g_maxValue;
static int s_maxValue;   
void Object::SetValue(int maxValue)
{
    m_maxValue = maxValue;
}

4、關於添加註釋的一些建議

在C++中註釋主要有兩種,程序塊的註釋常採用「 /*…*/」,行註釋通常採用「 //…」。註釋主要用在3個地方。一、版權申明,二、函數說明,三、重要或複雜代碼提示。對於前兩種,每一個人或者每一個公司都有我的的規範和習慣,這裏只要你們在公司內部統一便可。關於第三種給重要或複雜代碼添加提示,咱們有一下幾點建議。文檔

  • 建議一:註釋的確很重要,可是最好的代碼自己就是文檔(self-document),類型和變量命名意義明確要比經過註釋解釋模糊命名好得多
  • 建議二:邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。再也不有用的註釋要記得刪除。
  • 建議三:註釋的位置應與被描述的代碼相鄰,能夠放在代碼的上方或右方,不可放在下方。

5、關於類中成員聲明次序的一些建議

  • 建議一:在類中按照public:、protect:、private:的次序聲明。若是那一塊沒有直接忽略。
  • 建議二:在同一塊中按照一、結構體和枚舉,二、常量,三、構造函數,四、析構函數,五、成員函數,六、成員變量的次序聲明。

6、關於if語句中的變量「與零值比較」的一些建議

  • 建議一:不可將布爾變量直接與 TRUE、 **FALSE **或者 1、 **0 **進行比較。
    假設布爾變量名字爲 flag,它與零值比較的標準 if 語句以下:
if (flag) // 表示 flag 爲真
if (!flag) // 表示 flag 爲假
  • 建議二:應當將整型變量用「 ==」或「!=」直接與 0 比較。
    假設整型變量的名字爲 value,它與零值比較的標準 if 語句以下:
if (value == 0)
if (value != 0)

也能夠將0放在比較運算符前面。編譯器

if (0 == value)
if (0 != value)

這時若是將「==」寫成「=」,編譯器會報錯。

  • 建議三:不可將浮點變量用「 ==」或「!=」與任何數字比較。不管是 float 仍是 double 類型的變量,都有精度限制。因此必定要避免將浮點變量用「 ==」或「!=」與數字比較,應該設法轉化成「 >=」或「 <=」形式。
    假設浮點變量的名字爲 x,應當將
if (x == 0.0) // 隱含錯誤的比較

修改成

const float EPSINON = 0.00001;
if ((x>=-EPSINON) && (x<=EPSINON))

其中 EPSINON 是容許的偏差(即精度)。

  • 建議四:應當將指針變量用「 ==」或「! =」與** NULL **比較。
    假設指針變量的名字爲 p,它與零值比較的標準 if 語句以下:
if (p == NULL) // p 與 NULL 顯式比較,強調 p 是指針變量
if (p != NULL)

做者:吳尼瑪cs 連接:https://www.jianshu.com/p/ccc1b1992894 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索