網頁

2022/8/4

C++ 我的編碼規則

在學習C++的過程中發現編碼規則(coding style rule)十分混亂,所以下面建立一個自己習慣的編碼規則。

原本只想直接用Google C++編碼準則,但發現有些規則和我過去學習Java和Go的命名規則差異許多,而且許多命名規則混用,有的是lower_snake_case如變數、成員變數、存取函式;有的命名要加上前綴字如k開頭頭的常數、列舉項目;有的要加上後綴如類別成員變數要底線結尾;有的是UppserCamelCase命名如類別、列舉函式。

總之覺得非常混亂也很討厭使用底線的命名,還有些不習慣的排版風格如縮排等,或許已習慣Java和Go的命名方式,所以這邊的C++命名規則多參考Java或Go的方式。


檔案命名 File Names

檔案以alllowercase命名。

myfile.cpp
myheaderfile.h


型別命名 Type Names

型別以UpperCamelCase(PascalCase)命名,包括類別(class)、結構(struct)、union、列舉(enums)、型別別名(type alias)。

class MyClass {...};
struct MyStruct {...};
union MyUnion {...};
enum MyEnum {...};
using MyTypeAlias = ...;


變數命名 Variable Names

本地變數及全域變數以lowerCamelCase命名。

int globalVar;

int main() {
    int localVar;
    ...
}


成員變數(屬性)命名 Data Member Names

private的屬性lowerCamelCase命名。public的屬性UpperCamelCase命名。

class MyClass {
    private:
        attrInt;
    public:
        AttrInt;
};

struct的成員變數預設為public所以用UpperCamelCase命名。

class MyStruct {
    AttrInt;
};


列舉項目命名 Enumerator Names

列舉中的列舉項目以UPPSER_SNAKE_CASE

enum MyEnum {
    ENUMERATOR_1;
    ENUMERATOR_2;
};


常數命名 Constant Names

常數以UPPER_SNAKE_CASE命名。

const int MY_CONST = 100;


函式命名 Function Names

函式以UpperCamelCase命名。

void MyFunc() {...}


函式參數命名 Function Parameter Names

函式參數以lowerCamelCase命名。

void MyFunc(int paramInt, string paramString) {...}


命名空間 Namespace Names

命名空間以alllowercase命名。

namespace mynamespace {
    ...
}


單行註解 Single Line Comments

使用單行註解//在後空一格加上敘述。註解前有程式碼則空一格。若註解有多行則用多行註解/* ... */

// 這是單行註解
int num; // 這是單行註解


多行註解 Multi Line Comments

多行註解/* ... */的註解的開頭與結尾保持空行,註解文字縮排。多行註解不可用於程式碼後。

/*
    多行註解
    多行註解
*/


縮排空格 Indention Spaces

縮排空格一律用4格空白(spaces),禁用tabs。

int MyFunc(int paramInt) {
    if (paramInt < 0) {
        return parmInt;
    }
    ...
}


大括弧 Curly Brace

大括弧左括弧{不可獨立一行,前面空一格;若有換行則右括弧}獨立一行。

class MyClass {
    ...
};

void MyFunc() {...}


If-Else 條件式 If-Else Condition

if與後面判斷式括弧()空一格,總是使用大括弧。

else與前後的大括弧空一格。

if (...) {
    ...
} else {
    ...
}


未完待續...。

沒有留言:

張貼留言