2013-06-05 118 views
0

在我見過的代碼的很多例子中,他們以特定的方式爲變量命名。C++命名變量

E.g.

class obj 
{ 
    int mInt; 
} 

bool gTexture; 

問題。

  1. 爲什麼他們的名字他們這樣的方式,也有肯定更多的方式,我覺得...
  2. 你怎麼他們的名字,爲什麼?

謝謝

+0

http://stackoverflow.com/questions/234866/variable-naming-conventions-in-c?rq= 1 – blue

+0

這裏'm'和'g'前綴可能代表'm'ember和'g''全局。我工作時的編碼標準說我們對數據成員使用'd_',對靜態成員使用's_'。原始指針有一個'_p'後綴。 – BoBTFish

+0

是的,我工作的編碼標準說我們不使用前綴,後綴和下劃線。那又怎麼樣?你應該選擇一個你的公司/團隊使用的命名標準,或者遵循一些公開的指導方針,比如微軟公司(它會讓閱讀你的代碼更容易爲公司以外的人)。 – Spook

回答

0
  1. http://en.wikipedia.org/wiki/Hungarian_notation

  2. 不是一個真正的問題。每個人都按照他們的意願命名。你可以讀取這些準則,但:http://msdn.microsoft.com/en-us/library/vstudio/ms229045(v=vs.100).aspx

+0

然而,這並不是一個「匈牙利符號」的例子。 –

+0

@MatsPetersson你真的看過我鏈接到的文章嗎? 'g_nWheels:全局名稱空間的成員,整數; m_nWheels:結構/類的成員,整數「 – Spook

+1

@MatsPetersson維基百科文章特別提到'm'作爲C++中使用的匈牙利符號的擴展形式。 +1來撤銷downvote,儘管「不要使用匈牙利符號」對我來說太不靈活了。 –

0

您給出的示例使用'm'作爲成員變量,'g'表示全局變量。這是一些人使用的東西。它使得在成員函數中很容易看到(當函數比幾行更大時,所以不能只查看函數的頂部來查看參數的名稱,局部變量等等),什麼是「局部變量」,什麼影響「功能之外」。

如果您在公司,學校或開源項目中工作,很可能會有一個編碼標準來說明命名約定是什麼。如果這是你的個人項目,那麼就決定你認爲適合你的東西。重點是它是一致的。如果不是所有的成員變量都以'm'開頭,並不是所有的全局變量都以'g'開頭,那麼在某些地方使用它就沒有意義 - 只會給人一種錯誤的安全感。

0

你不必遵循特定的記法,但如果你這樣做很酷。

所有內容都與代碼的清晰度有關,沒有任何大寫字母的變量確實比具有良好合成語法的變量更容易理解。(在第一種觀點,當你看的代碼快速的一部分)

對於一個明確的代碼,我可以推薦谷歌的norme的C++代碼:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

0

他們爲什麼他們的名字在這樣的方式,並有肯定更多的方式,我認爲...

一般很難理解別人的代碼;如果足夠的時間過去了,那麼很難理解你自己的代碼。由於這個原因,軟件團隊建立了一些約定,以確保他們團隊編寫的代碼與他們自己編寫的代碼儘可能相似。

這涉及結構化代碼,使用過的元素(接口,類,命名空間等),命名函數和變量,要記錄的內容以及格式等等。

當正確和一致地完成時,它會縮短團隊內的代碼維護時間。

有幾個已知的約定,主要來自用於實現大型代碼庫和使用庫的慣例。

Java傾向於使用camelCaseNotation(以小寫字母開頭,不使用下劃線,大寫每個單詞)。

MFC使用了匈牙利符號,其中變量名前面加了幾個字母,用於指定數據的範圍和類型(m_XXX代表成員變量,g_XXX代表全局變量,s_XXX代表靜態代碼等)。

特別是匈牙利的約定可以通過使用語義信息的前綴來獲得,或者可怕的錯誤(通過使用語法信息的前綴)。

(MFC得到了它可怕的錯誤。)

ANSI C++(和std ::命名空間)傾向於使用small_letters_with_underscores標識符。

還有其他人和大多數軟件團隊建立了一個約定,它是其中一個重要的約定。

你如何命名它們?爲什麼?

這幾天我遵循ANSI C++約定,主要是因爲我想我的代碼與庫代碼無縫集成。我也認爲它看起來簡單明瞭(這是非常主觀的)。

我很少使用一個字母變量(只有當含義是明確的),更喜歡全部單詞,縮短的。

例子:

指標:int index, line_index, col_index;

類名:class recordset; class task_details;