1. 程式人生 > >C++(-)命名規則

C++(-)命名規則

眾所周知,每一門語言都有自己的命名規範和編碼風格,形成這樣的準則後,不僅給程式帶來可讀性,也為日後自己和他人維護帶來不少方便,更重要的是這是一種態度。這裡我結合網路上的資料整理了一下C++的命名規範。

   一、 先說明一下命名規範的整體原則:

同一性

在編寫一個子模組或派生類的時候,要遵循其基類或整體模組的命名風格,保持命名風格在整個模組中的同一性。

識別符號組成

標識符采用英文單詞或其組合,應當直觀且可以拼讀,可望文知意,用詞應當準確。

最小化長度 && 最大化資訊量原則

在保持一個識別符號意思明確的同時,應當儘量縮短其長度。

避免過於相似

不要出現僅靠大小寫區分的相似的識別符號,例如“i”與“I”,“function”與“Function”等等。

避免在不同級別的作用域中重名

程式中不要出現名字完全相同的區域性變數和全域性變數,儘管兩者的作用域不同而不會發生語法錯誤,但容易使人誤解。

正確命名具有互斥意義的識別符號

用正確的反義片語命名具有互斥意義的識別符號,如:"nMinValue"和"nMaxValue","GetName()" 和 "SetName()" ....

避免名字中出現數字編號

儘量避免名字中出現數字編號,如Value1,Value2等,除非邏輯上的確需要編號。這是為了防止程式設計師偷懶,不肯為命名動腦筋而導致產生無意義的名字(因為用數字編號最省事)。

二、命名規範的細節

類/結構

除了異常類等個別情況(不希望使用者把該類看作一個普通的、正常的類之情況)外,C++類/結構 
的命名應該遵循以下準則:

C++類/結構的命名

類的名稱都要以大寫字母“C”開頭,後跟一個或多個單詞。為便於界定,每個單詞的首字母要大寫。

推薦的組成形式

類的命名推薦用"名詞"或"形容詞+名詞"的形式,例如:"CAnalyzer", "CFastVector" ....

不同於C++類的概念,傳統的C結構體只是一種將一組資料捆綁在一起的方式。傳統C結構體的命名規則為:

傳統C結構體的命名

傳統C結構體的名稱全部由大寫字母組成,單詞間使用下劃線界定,例如:"SERVICE_STATUS", "DRIVER_INFO" ....

函式

函式的命名

函式的名稱由一個或多個單片語成。為便於界定,每個單詞的首字母要大寫。

推薦的組成形式

函式名應當使用"動詞"或者"動詞+名詞"(動賓片語)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....

保護成員函式

保護成員函式的開頭應當加上一個下劃線“_”以示區別,例如:"_SetState()" ....

私有成員函式

類似地,私有成員函式的開頭應當加上兩個下劃線“__”,例如:"__DestroyImp()" ....

虛擬函式

虛擬函式習慣以“Do”開頭,如:"DoRefresh()", "_DoEncryption()" ....

回撥和事件處理函式

回撥和事件處理函式習慣以單詞“On”開頭。例如:"_OnTimer()", "OnExit()" ....

變數

變數應該是程式中使用最多的識別符號了,變數的命名規範可能是一套C++命名準則中最重要的部分:

變數的命名

變數名由作用域字首+型別字首+一個或多個單片語成。為便於界定,每個單詞的首字母要大寫。

對於某些用途簡單明瞭的區域性變數,也可以使用簡化的方式,如:i, j, k, x, y, z ....

作用域字首

作用域字首標明一個變數的可見範圍。作用域可以有如下幾種:

字首

說明

區域性變數

m_

類的成員變數(member)

sm_

類的靜態成員變數(static member)

s_

靜態變數(static)

g_

外部全域性變數(global)

sg_

靜態全域性變數(static global)

gg_

程序間共享的共享資料段全域性變數(global global)

除非不得已,否則應該儘可能少使用全域性變數。

型別字首

型別字首標明一個變數的型別,可以有如下幾種:

字首

說明

n

整型和位域變數(number)

e

列舉型變數(enumeration)

c

字元型變數(char)

b

布林型變數(bool)

f

浮點型變數(float)

p

指標型變數和迭代子(pointer)

pfn

特別針對指向函式的指標變數和函式物件指標(pointer of function)

g

陣列(grid)

i

類的例項(instance)

對於經常用到的類,也可以定義一些專門的字首,如:std::string和std::wstring類的字首可以定義為"st",std::vector類的字首可以定義為"v"等等。

型別字首可以組合使用,例如"gc"表示字元陣列,"ppn"表示指向整型的指標的指標等等。

推薦的組成形式

變數的名字應當使用"名詞"或者"形容詞+名詞"。例如:"nCode", "m_nState","nMaxWidth" ....

常量

C++中引入了對常量的支援,常量的命名規則如下:

常量的命名

常量名由型別字首+全大寫字母組成,單詞間通過下劃線來界定,如:cDELIMITER, nMAX_BUFFER ....

型別字首的定義與變數命名規則中的相同。

列舉、聯合、typedef

列舉、聯合及typedef語句都是定義新型別的簡單手段,它們的命名規則為:

列舉、聯合、typedef的命名

列舉、聯合、typedef語句生成的型別名由全大寫字母組成,單詞間通過下劃線來界定,如:FAR_PROC, ERROR_TYPE ....

巨集、列舉值

巨集、列舉值的命名

巨集和列舉值由全大寫字母組成,單詞間通過下劃線來界定,如:ERROR_UNKNOWN, OP_STOP ....

相關推薦

C++-命名規則

眾所周知,每一門語言都有自己的命名規範和編碼風格,形成這樣的準則後,不僅給程式帶來可讀性,也為日後自己和他人維護帶來不少方便,更重要的是這是一種態度。這裡我結合網路上的資料整理了一下C++的命名規範。    一、 先說明一下命名規範的整體原則: 同一性 在編寫一個子

C++考試複習2c++識別符號和命名規則

字符集 C++的字符集有下面的字符集組成: (1)52個大小寫英文字母; (2)10個數字字元 (3)其他字元: 空格 ! # % ……& * _等等 識別符號 含義: 由若干個字元構成的具

痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器介紹篇3- 命名規則

rule 成員 oom 嵌入 信息 100% 規則 控制器 今天   大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的命名規則。   打開任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名規則表,以i.M

Java基礎筆記——命名規則、數據類型

嚴格 符號 構造函數 不能 釋放 常量 存在 null 超過 標識符即Java程序中需要自定義的名稱,如變量名、方法名、類名、包名、工程名等。 標識符的命名規則: 1.可由字母、數字、下劃線(_)和美元符($)組成,不能以數字開頭。 2.嚴格區分大小寫。 3.不能是Java

Thinking in java之編碼風格java命名規則

在“java程式語言編碼約定”中,程式碼風格是這一規定的: 類名的首字母要大寫,如果類名由幾個單詞構成,那麼把他們拼在一起(也就是說不要用下劃線來分隔名字),其中每個單詞的首字母都採用大寫的形式。這樣

C#中變數命名規則

       每學習一門新的程式語言,開始都會講變數的命名規則,現在剛接觸C#,還是會感覺很親切,我們之前學過VB,對比著來,就會發現裡面有好多東西都是雷同的,下面先講述一下C#和VB中變數命名規則有

較好的方法命名規則

bsp 事件 nta nds NPU remove change back syn 2015年11月19日 第一版 原文鏈接:http://qiita.com/KeithYokoma/items/2193cf79ba76563e3db6 原作者:KeithYokoma

解密:普通JavaBean的Property域/類變數命名規則

1、背景 本文講的普通JavaBean只是一個擁有Property(域/類變數)及其setter/getter的普通Java類。 有一定Java開發經驗的人可能會知道,普通JavaBean的Property(域/類變數)的命名不能採用以下形式:aA***或者Aa***,如:"aDdress"

java中package命名規則,Java包package命名規範

Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模組的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模組,從而直接到對應包裡找相應的實現。       由於Java面向物件的特性,每名J

資料庫命名規範命名規則

資料庫命名規範   引言:資料庫設計過程中庫、表、欄位等的命名規範也算是設計規範的一部分,不過設計規範更多的是為了確保資料庫設計的合理性、為了專案最終的協調穩定性,而命名規範更多的是為了確保設計的正式和統一。資料庫中欄位等等以什麼樣的命名方式,並不會直接影響到專案的穩定性。 制定規範的直接目的

數據庫命名規範命名規則

並不會 約束 做什麽 字段名 delet ext 目的 ali 簡介 數據庫命名規範 引言:數據庫設計過程中庫、表、字段等的命名規範也算是設計規範的一部分,不過設計規範更多的是為了確保數據庫設計的合理性、為了項目最終的協調穩定性,而命名規範更多的是為了確保設計的正式和統

C/C++函式符號生成規則函式名的修飾C++ 函式過載

         函式符號(函式的名字修飾):在編譯階段生成的字串,來指明函式的定義或原型 。 C函式符號生成規則: _cdel呼叫約定(C標準呼叫約定):函式名前加下劃線。 _stdcall呼叫約定:函式名前加下劃線,函式名後加“@”符號和其引數位元組。 _fast

變數的命名規則方法

經典命名規則 匈牙利命名法。該命名法是在每個變數名的前面加上若干表示資料型別的字元。基本原則是:變數名=屬性+型別+物件描述。如i表示int,所有i開頭的變數命都表示int型別。s表示String,所有變數命以s開頭的都表示String型別變數。 駱駝命名法

CSS語義化命名及常用命名規則推薦

轉自:http://beyondweb.cn/article_detail.php?id=8 (轉載後有調整) CSS語義化命名 從上圖我們可以大概看出這裡有兩種CSS的命名方式: 1、結構化命名法;(根據位置命名) 2、語義化命名法。 ( 根據功能命名 )

FPGA 主流晶片選型指導和命名規則

題目可能有點大,主要介紹Xilinx和Altera公司的主流晶片的選型(包括中低高階產品的介紹)和兩大廠家的命名規則,主要看封裝和邏輯數量。 1.主流晶片選型 1.1Xilinx主流晶片選型   老規矩,先上個文件,可以自行下載:   http://

圖說函式模板右值引用引數(T&&)型別推導規則C++11

見下圖: 規律總結: 只要我們傳遞一個基本型別是A④的左值,那麼,傳遞後,T的型別就是A&,形參在函式體中的型別就是A&。 只要我們傳遞一個基本型別是A的右值,那麼,傳遞後,T的型別就是A,形參在函式體中的型別就是A&&。 另外,模板引數型別推導是保留cv限定符(cv-

Java包package命名規範,java中package命名規則

 Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模組的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模組,從而直接到對應包裡找相應的實現。     由於Java面向物件的特性,每名Java開發人員都可以編寫屬於

Python的列表list命名規則和方法

第二天 List學習 List就是一個列表,就像把梯子橫著放,每一個空檔的位置可以放一些元素,整形:3,浮點型:3.14,字串:“helloworld”。每一個空檔都有一個下標(index), 從0開

設計模式——抽象工廠模式C++實現

concrete out png return style bsp ctp img using 1 #include <iostream> 2 #include <string> 3 4 usin

設計模式——觀察者模式C++實現

ace mes des ret rtu cto pattern virt date 1 #include <iostream> 2 #include <vector> 3 #include <algorithm>