C 編碼風格與規範

2021-07-30 19:04:00 字數 3956 閱讀 4575

命名應該含義明確,不要為了節省空間使用縮寫。

int n; // bad - 無明確含義的單字母名稱

string cstmrname; // bad - 非約定俗成的縮寫

int width, height; // ok - 含義明確

int numcolors; // ok - num屬於約定俗成的縮寫

for (int i = 0; i < 100; ++i) // ok - 迴圈變數可以使用單個字母的命名

template

// ok - t用做模板引數屬於約定俗成的寫法

首字母縮寫詞只在需要時大寫第乙個字母。

class urltable // bad

class urltable // ok

string xmlfilename; // bad

string xmlfilename; // ok

檔名全部為小寫,單詞之間沒有其它符號。標頭檔案以.h為副檔名,實現檔案以.cpp為副檔名。一般情況下,乙個類對應乙個.h檔案和乙個.cpp檔案,檔名與類的名字相同。

所有型別,包括類、結構體、列舉(包括列舉項)、和型別定義(typedef)等,遵循相同的命名方式:每個單詞的第乙個字母大寫。型別名一般為名詞。

class foobar 

;struct barbaz

;enum colorchannel

;typedef hash_mappropertiesmap;

using propertiesmap = hash_map;

在對列舉項命名時,為了避免歧義,列舉項名稱中應至少包含列舉型別名稱中的乙個單詞。

enum

casesensitivity

; // bad

enum

casesensitivity

; // good

變數名(包括函式的引數),第乙個字母小寫,後面每個單詞的第乙個字母大寫。不要使用匈牙利命名法(變數名前加表示型別的字首)。

int inumimages; // bad

int numimages; // ok

string strtablename; // bad

string tablename; // ok

類的成員變數加m_字首,結構體的成員變數則不加任何字首。全域性變數加g_字首。靜態成員變數不加字首。

class urltableproperties 

;struct imageinfo

;

vector、list、map等容器型別的變數,使用名詞的複數形式表示。

vector

holidays;

map employeeroles;

qvectorimages;

函式的第乙個字母小寫,後面每個單詞的第乙個字母大寫。qt中的slot採用和函式一樣的命名方式。

// 常見的函式命名方式

add()

// 動詞

addtableentry()

// 動詞+名詞

setcolor()

// set+名詞

hasfocus()

// has+名詞

canconvert()

// can+動詞

canchangeproperty()

// can+動詞+名詞

tobase64()

// to+名詞

isarray()

// is+名詞

isempty()

// is+形容詞

ischecked()

// is+形容詞

ismovingenabled()

// is+形容詞

color()

// 名詞前面的get可以省略

autocompletion()

// 名詞前面的is可以省略

常量採用和變數相同的命名方式。

const

int daysinaweek = 7;

巨集定義用大寫字母表示,單詞之間用下劃線分割。

#define round(x) ...

#define pi_rounded 3.0

命名空間採用和型別相同的命名,即每個單詞的第乙個字母大寫。

namespace foobar 

;

花括號應獨佔一行,除非花括號用來表示可用一行**表示的inline的函式體,或表示初始化列表。

class foo

private:

struct bar

;};int foobar()

for (int i = 0; i < 10; ++i)

int array = ;

必須有乙個空格的位置:

- 二元操作符,包括賦值符號的兩側

- 關鍵字和圓括號之間

- 不在行末的逗號和分號後

- 表示繼承和初始化列表的冒號兩側

- 只有一行語句的函式體的花括號與語句之間

- delete和之間,以及和變數名之間

不能有空格的位置:

- 逗號和分號前

- 圓括號和尖括號內側

- 函式名和圓括號之間

- 一元操作符和運算元之間

- 空的圓括號和花括號中

- 表示初始化列表的花括號和值之間

- 範圍操作符(::)兩側

- #號右側

class foo : public bar 

void reset()

private:

int m_baz;

}for (int i = 0; i < 5; ++i)

x = 0;

x = -5;

++x;

if (x && !y)

delete buffer;

表示指標和引用的符號和&和型別之間加乙個空格,但和&與變數名之間不加空格。

char *filename;

const qstring &filename;

可以使用空行將**分組,但不要使用超過乙個空行。

所有標頭檔案都要使用#ifndef #define #endif防止標頭檔案被多重包含。不要使用#pragma once。

#ifndef foo_bar_h

#define foo_bar_h

...#endif // foo_bar_h

標頭檔案本身應包含所有需要的標頭檔案,以便在引用它時不需要首先包含其它的標頭檔案。在標頭檔案中,按照下面的順序包含需要的標頭檔案:c標準庫,c++標準庫,其它庫的標頭檔案,專案內的其它標頭檔案。在引用標頭檔案的.cpp檔案中,總是把它對應的標頭檔案放在其它所有標頭檔案的前面。同種型別的標頭檔案按照字母表的順序決定哪個放在前面。避免包含不必要的標頭檔案。

// foo.cpp檔案

#include "foo.h" // foo.cpp related header

#include // c library

#include // c library

#include // c++ library

#include // c++ library

#include // qt library

#include "bar.h" // other header files in your project

注釋符號可以使用//,也可以使用/**/。注釋符號和注釋內容之間有乙個空格。注釋在一行的末尾時,注釋符號和**之間要有乙個空格。

編碼風格不是編碼規範

我並不認為程式設計師是乙個情緒特別豐富的群體。但有一些事情卻能很容易刺激程式設計師的神經,那就是 格式和布局。如果看到乙個函式的括弧在同一行上沒有閉合,我的眼睛會噴血。如果看到有人沒有恰好的在兩個函式間留一空行,我的小腿會抽筋。但重點在這裡 除非是在家裡開發自己的業餘愛好軟體,我的這些個人喜好其實是...

PSR 2 編碼風格規範

必須 使用 4 個空格符而不是 tab 鍵 進行縮排。每行的字元數 應該 軟性保持在 80 個之內,理論上 一定不可 多於 120 個,但 一定不可 有硬性限制。每個 namespace 命名空間宣告語句和 use 宣告語句塊後面,必須 插入乙個空白行。類的開始花括號 也 必須 寫在函式主體後自成一...

python風格規範 Python風格規範

請務必保持 的一致性 如果你正在編輯 花幾分鐘看一下周邊 然後決定風格.如果它們在所有的算術操作符兩邊都使用空格,那麼你也應該這樣做.如果它們的注釋都用標記包圍起來,那麼你的注釋也要這樣.制定風格指南的目的在於讓 有規可循,這樣人們就可以專注於 你在說什麼 而不是 你在怎麼說 我們在這裡給出的是全域...