2010-02-18 214 views
7

MFC具有以C開頭的所有類名稱。例如,CFile和CGdiObject。有沒有人看到它在別處使用?是否有Microsoft推薦這種風格的官方命名約定指南?這個想法是源於MFC還是其他項目?以C開頭的類名稱

+1

我所知道的是,我很高興他們用.NET命名約定修復了它:) – 2010-02-19 01:28:35

回答

12

東西有點類似在Symbian C++的,其中該慣例是使用其他)資源,例如的RFile,方法RSocket

中號類的混入,其包括接口(解釋爲無功能的實現混入)。指導原則是多重繼承最多隻涉及1個非M類。

C類幾乎是其他所有的東西,並從CBase派生,它有一些東西在幫助資源處理。

HBufC的存在主要是爲了產生基於Symbian論壇困惑的帖子,並具有其自己的前綴僅僅是個開始。 H代表「呃?」,或者可能是「唧唧!你沒有STL!」 ;-)

這在本質上應用匈牙利命名法,而不是系統匈牙利命名法接近。前綴告訴你一些關於你可以在文檔中查找的類,但是你不知道的其他類。 編程命名什麼的全部要點是提供這樣的暗示和提醒,否則,你只需要調用你的類「Class001」,「Class002」,等等。

系統匈牙利語只是告訴你一個變量的類型,IMO沒什麼特別興奮的,特別是在像C++這樣的語言中,類型傾向於不斷重複或者完全被模板參數隱藏。命名類型時的類比是Java命名所有接口的慣例。我再也不會爲此感到興奮(也不是標準的Java庫),但是如果你要爲每個類定義一個接口除了在非測試情況下實際用於多態的接口外,還需要一些方法來區分這兩種接口。

0

我們使用它在工作,像許多其他的命名約定

很多我的意思是下類,P爲指針,M_爲會員,爲S_靜態成員,正整數......不是很多文件

3

我無法回答你所有的問題,但據我所知,這只是區分MFC類和其他類 - 匈牙利符號的一種形式。

有趣的是,它顯然是有爭議的不只是外面的MS,但inside as well

+2

是的,他們知道什麼 - 例如,.NET指導方針拒絕爲類加前綴的想法,但是很好前綴接口。有時候爭議是沒有理由的。 – gbjbaanb 2010-02-18 21:58:45

9

這是一種舊的C++編碼風格,MFC可能是使用它的最後一件事情之一。

它通常只是C++(也可能是其他幾種語言)的慣例,因此它開始失寵,因爲語言通過COM和.NET進一步互操作。

你仍然可以看到它的表弟,接口的「I」前綴,經常。我一直覺得有趣的是,當「C」死的時候「我」倖存下來了,但那可能是因爲接口在COM互操作性中被大量使用。

+7

我認爲清楚地表達一個類應該是一個接口並使用'I'作爲前綴的事實的重要性可能仍然在廣泛使用,因爲它更短,更清晰,然後稱爲「Base」後綴。 – 2010-02-18 22:00:42

+2

它可能沒有死,因爲它涉及少數(接口,泛型類型參數),最常見的(類)不會得到額外的混亂。 – 2010-02-18 22:05:42

+0

那麼還有誰用過它?只有微軟? – User1 2010-02-18 23:13:24

16

這是邪惡的。除了抽象的東西,不要使用匈牙利符號。

例如,btnSubmit是確定來形容一個名爲提交按鈕(這將有一個附帶的lblSubmit的按鈕旁邊的標籤)

但像CMyClass對於類和uiCount無符號整數東西命名計數不幫助程序員,並導致額外的浪費型打字。

Ť類是「值」,例如TCHAR,TInt32,TDES

ř類手柄內核(或:

+0

@Earlz:我不同意你對uiCount和額外輸入的說法。如果我讀了「if(uiXCoord <0)」這樣的紅燈開始閃爍,但是如果我讀到「if(xCoord <0)」而xCoord是一個unsigend int,則不會。而且輸入一些額外的字符永遠不會成爲軟件沒有及時準備好的原因,輸入代碼是軟件開發人員遇到的最小問題。知道輸入什麼更重要。 – Habi 2010-02-18 22:30:02

+6

@Habi:在這種情況下,您可能更想聽編譯器警告。另外,也許使用更多的描述性變量名稱 - 通用x座標應該是無符號的原因是什麼? – UncleBens 2010-02-18 22:40:47

+3

@Habi:當uiCount類型從'unsigned int'改爲'unsigned long','signed int'或'double'時,會發生什麼?根據匈牙利語法,變量必須重新命名,*無處不在*它被使用。根據驗證,任何修改的功能或方法都必須經過測試。看起來像是完全迴歸測試的開始。 :-( – 2010-02-18 23:24:01

4

年前的命名約定對幫助識別班級甚至班級分組至關重要。不要忘了當時沒有命名空間,也沒有/有限的智能感知可用。 C是匈牙利符號的一種形式,但肯定會被MFC使用。 Borland和Delphi使用T - 作爲前綴類型

+0

基於20年前MS編譯器支持的另一種MFC設計選擇,而不是在現代C++中如何實現。 – 2010-02-19 11:07:00

4

我記得Borland編譯器正在使用類名以'T'開頭的庫。可能爲「type」:)

+0

我總是認爲是因爲Turbo Pascal/Turbo C中的T ...編碼自戀:) – Avio 2014-10-15 15:55:40

3

雖然MFC和許多爲Windows編寫的軟件都使用「C」類的約定,但通常在爲UNIX平臺編寫的軟件中找不到後者。我認爲這是Visual C++強烈鼓勵的習慣。我記得Visual C++ 6.0會爲任何使用類嚮導創建的類添加一個「C」。

0

變量的這種約定對像Fortran這樣的語言很有用,因爲在使用它們之前不需要聲明變量的類型。我似乎記得,名稱以「i」或「j」開頭的變量默認爲整數,變量名稱以「r」開頭,其他字母默認爲實數(浮點)值。

人們在需要聲明變量或類定義的語言中使用類似語言可能僅僅是某人誤解了Fortran等語言中舊代碼慣例的一個遺留問題。

0

在編寫使用Qt庫的應用程序時,我們使用一個命名約定來區分直接或間接從QObject派生的類與不從類派生的類。這很有用,因爲您可以從類名稱中瞭解它是否支持來自QObject的信號/插槽,屬性以及所有其他好東西。