




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 常見命名規(guī)則- 比較著名的命名規(guī)則首推匈牙利命名法, 這種命名方法是由Microsoft程序員查爾斯·西蒙尼(Charles Simonyi 提出的。 其主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。 匈牙利命名法關(guān)鍵是:標(biāo)識(shí)符的名字以一個(gè)或者多個(gè)小寫字母開頭作為前綴; 前綴之后的是首字母大寫的一個(gè)單詞或多個(gè)單詞組合,該單詞要指明變量的用途。 例如:lpszStr, 表示指向一個(gè)以'0'結(jié)尾的字符串(sz)的長(zhǎng)指針(lp)變量。 駱駝(Camel)命名法近年來越來越流行, 在許多新的函數(shù)庫(kù)和Java這樣的平臺(tái)下使用得當(dāng)相多。 駱駝命名法,正如它的名
2、稱所表示的那樣,指的是混合使用大小寫字母來構(gòu)成標(biāo)識(shí)符的名字。 其中第一個(gè)單詞首字母小寫,余下的單詞首字母大寫。 例如:printEmployeePaychecks(,函數(shù)名中每一個(gè)邏輯斷點(diǎn)都有一個(gè)大寫字母來標(biāo)記。 帕斯卡(Pascal)命名法與駱駝命名法類似。 只不過駱駝命名法是第一個(gè)單詞首字母小寫,而帕斯卡命名法則是第一個(gè)單詞首字母大寫。 例如:DisplayInfo(和UserName都是采用了帕斯卡命名法。 在C#中,以帕斯卡命名法和駱駝命名法居多。 事實(shí)上,很多程序設(shè)計(jì)者在實(shí)際命名時(shí)會(huì)將駱駝命名法和帕斯卡結(jié)合使用, 例如變量名采用駱駝命名法,而函數(shù)采用帕斯卡命名法。 另一種流行的命名規(guī)
3、則稱為下劃線命名法。 下劃線法是隨著C語言的出現(xiàn)流行起來的,在UNIX/LIUNX這樣的環(huán)境,以及GNU代碼中使用非常普遍。 - 編寫高質(zhì)量的代碼 編寫高質(zhì)量的代碼不僅可以提高程序執(zhí)行效率,縮減代碼長(zhǎng)度,而且對(duì)于保證程序的可 靠性也是相當(dāng)重要的。事實(shí)證明,低效冗長(zhǎng)的代碼更容易出現(xiàn)錯(cuò)誤。一段高質(zhì)量代碼需要很 多方面的綜合配合,如明晰的項(xiàng)目需求、簡(jiǎn)潔合理的程序結(jié)構(gòu)、出色的文檔、高效的語句表 達(dá)等,這是一個(gè)復(fù)雜的工程。這里只討論如何編寫出高效的表達(dá)語句。后面編程實(shí)例中會(huì)介 紹如何安排好程序結(jié)構(gòu)。對(duì)此類問題感興趣的讀者可以閱讀軟件工程方面的相關(guān)書籍。 微處理器一般用于特定環(huán)境和特定用途,出于成本、功耗
4、和體積方面的考慮,一般都要 求盡量節(jié)省使用資源。并且,由于微處理器的硬件一般都不支持有符號(hào)數(shù)、浮點(diǎn)數(shù)的運(yùn)算, 且運(yùn)算位數(shù)有限,因此,分配變量時(shí)必須仔細(xì)。另外要說明的是,速度和存儲(chǔ)器的消耗經(jīng)常 是兩個(gè)不可兼顧的目標(biāo),多數(shù)情況下,編程者必須根據(jù)實(shí)際情況作出權(quán)衡和取舍。 需要注意的事項(xiàng)如下: (1)通 常在滿足運(yùn)算需求的前提下,盡量選擇為變量定義字節(jié)數(shù)少的數(shù)據(jù)類型。 (2)盡量不用過長(zhǎng)的數(shù)據(jù)類型,如long long 和double。 (3)MSP430 不支持位尋址,所以運(yùn)算中盡量減少位操作。 兩種取值的變量,如果RAM 容量允許,則可分配為unsigned char 類型,這樣可以提高 運(yùn)算速度
5、。如果分配成某一字節(jié)中的某一位,則可以減少存儲(chǔ)器的消耗,但會(huì)降低運(yùn)算 速度。 (4)避免使用浮點(diǎn)數(shù),盡量使用定點(diǎn)數(shù)進(jìn)行小數(shù)運(yùn)算。如果必須使用浮點(diǎn)數(shù),則盡量使 用32 位的float,而不是64 位的double。 (5)盡量將變量分配為無符號(hào)數(shù)據(jù)類型。 (6)對(duì)于指針變量,如果聲明后其值不再改變,則聲明成const 類型,這樣編譯器編譯 時(shí)能夠更好地優(yōu)化所生成的代碼。 (7)盡可能使用局部變量而不是全局變量或者靜態(tài)變量(static)。這樣有利于編譯器編 譯時(shí)更好地優(yōu)化所生成的代碼。 (8)避免對(duì)局部變量使用&取地址符。因?yàn)檫@樣會(huì)使編譯器無法把此變量放在CPU 的寄 存器中,而是放在R
6、AM 中,從而失去了優(yōu)化的機(jī)會(huì)。 (9)僅在模塊內(nèi)使用的變量聲明為staic 類型,這樣有利于編譯器優(yōu)化。 (10)如果堆棧空間有限,則盡量減少函數(shù)調(diào)用的層次和遞歸調(diào)用。 (11)如果傳送參數(shù)過多,則可以將參數(shù)組成一個(gè)數(shù)組或者結(jié)構(gòu),然后用指針傳遞。 (12)某些變量在中斷程序和普通級(jí)別程序中都會(huì)被用到,所以必須加以保護(hù)。將變量 聲明為volatile 類型,編譯器優(yōu)化時(shí)就不會(huì)移動(dòng)它,對(duì)它的訪問也就不會(huì)被延遲。應(yīng)該保證對(duì) volatile 的變量的訪問不被打斷,為此,可以在訪問它的部分加上_monitor 聲明。 頭文件中的內(nèi)容應(yīng)該按照固定的順序編寫。首先使用#include 包含語句編寫本頭文
7、件中. - 變量的命名應(yīng)該基本能夠反映變量的數(shù)據(jù)類型和含義。一個(gè)變量由如下幾部分組成:存 儲(chǔ)類型+數(shù)據(jù)類型+變量名。命名規(guī)則如下: 存儲(chǔ)類型 全局變量:大小寫混用,不同部分之間用大寫字母隔開。 局部變量:全部用小寫,不同部分之間用“_”隔開。 數(shù)據(jù)類型 全部用小寫字母。 char (無) int i float f double d struct s 指針 p 數(shù)組 a 有符號(hào) g 變量名 使用縮寫或者拼音都可以,大小寫按照存儲(chǔ)類型的規(guī)定進(jìn)行。 舉例: unsigned char MoonRiver; /全局無符號(hào)字符變量 unsigned char moon_river; /局部無符號(hào)字符變
8、量 char gMoonRiver; /全局有符號(hào)字符變量 char g_moon_river; /全局有符號(hào)字符變量 unsigned int iMoonRiver; /全局無符號(hào)整數(shù)變量 unsigned int* piMoonRiver; /全局指向無符號(hào)整數(shù)類型的指針變量 unsigned int p_moon_river; /局部指向無符號(hào)整數(shù)類型的指針變量 有幾種最常用到的變量,這里給出特別定義: q0、q1、q2. 定義為unsigned char 類型,為在函數(shù)內(nèi)部聲明的局部變量。 iq0、iq1、iq2. 定義為unsigned int 類型,為在函數(shù)內(nèi)部聲明的局部變量。 f
9、q0、fq1、fq2. 定義為float 類型,為在函數(shù)內(nèi)部聲明的局部變量。 n0、n1、n2. 定義為unsigned char 或者unsigned int 類型,在函數(shù)內(nèi)部作為循環(huán) 次數(shù)的計(jì)數(shù)器使用。 - 3縮略語 由于有幾種詞義在編程時(shí)經(jīng)常會(huì)遇到,所以有必要為它們固定定義一個(gè)縮寫,這樣在遇 到這些縮寫的時(shí)候就能夠很快知道它們所表示的內(nèi)容,這些縮寫稱為縮略語??s略語在定義 變量和函數(shù)名的時(shí)候都可以使用。 (1)N 下標(biāo)變量。如要向一個(gè)數(shù)組中按順序填充數(shù)據(jù),則需要一個(gè)變量保存數(shù)組的 下標(biāo)。如果數(shù)組定義為unsigned int aiMoon5,那么可以定義保存下標(biāo)的變量為unsigned
10、char NMoon,這樣就很容易知道這個(gè)變量是數(shù)組aiMoon 的下標(biāo),而不會(huì)將其誤用為其他 用途。 (2)b 布爾變量,只有“是”和“非”兩種取值的變量。 (3)Tim 表示與時(shí)間有關(guān)的變量。 (4)Cnt 計(jì)數(shù)或計(jì)時(shí)變量。程序中經(jīng)常會(huì)對(duì)某些事件或者時(shí)間進(jìn)行計(jì)數(shù)。如變量 CntTimMs 是用來計(jì)時(shí)的變量,計(jì)時(shí)單位是毫秒。 (5)Pre 上一個(gè)變量。通過指針存取數(shù)組時(shí),此縮略語用來表示當(dāng)前指針?biāo)傅刂返那?一個(gè)地址。 (6)Nt 下一個(gè)變量。通過指針存取數(shù)組時(shí),此縮略語用來表示當(dāng)前指針?biāo)傅刂返南?一個(gè)地址。 (7)Sta 狀態(tài)變量。程序中有時(shí)需要定義多個(gè)工作的狀態(tài),程序根據(jù)當(dāng)前所在的狀態(tài)
11、來 確定執(zhí)行何種算法。含有此縮略語的變量表明此變量保存的是當(dāng)前程序的工作狀態(tài)。 (8)Max 最大值。 (9)Min 最小值。 (10)Init 初始化變量。 (11)Sys 系統(tǒng)變量。表明此變量是與整個(gè)單片機(jī)系統(tǒng)有關(guān)的變量。 _NOP(; /空操作,可以作為測(cè)試點(diǎn)、延時(shí)等。 - Windows應(yīng)用程序的標(biāo)識(shí)符通常采用“大小寫”混排的方式,如AddChild。而Unix應(yīng)用程序的標(biāo)識(shí)符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類風(fēng)格混在一起用。 【規(guī)則1-4】程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符。 例如: intx,X;/ 變量x 與 X 容易混淆 void foo(
12、int x;/ 函數(shù)foo 與FOO容易混淆 void FOO(float x; 【規(guī)則1-5】程序中不要出現(xiàn)標(biāo)識(shí)符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會(huì)發(fā) 生語法錯(cuò)誤,但會(huì)使人誤解。 【規(guī)則1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”。 例如: floatvalue; floatoldValue; floatnewValue; 【規(guī)則1-7】全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞名詞”(動(dòng)賓詞組)。類的成員函數(shù)應(yīng)當(dāng)只使用“動(dòng)詞”,被省略掉的名詞就是對(duì)象本身。 例如: DrawBox(; / 全局函數(shù) box->Draw(; / 類的成員函數(shù) 【規(guī)則1-8】用
13、正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。 例如: int minValue; int maxValue; int SetValue(; int GetValue(; 【建議1-1】盡量避免名字中出現(xiàn)數(shù)字編號(hào),如Value1,Value2等,除非邏輯上的確需要編號(hào)。這是為了防止程序員偷懶,不肯為命名動(dòng)腦筋而導(dǎo)致產(chǎn)生無意義的名字(因?yàn)橛脭?shù)字編號(hào)最省事)。 - 2 簡(jiǎn)單的Windows應(yīng)用程序命名規(guī)則 作者對(duì)“匈牙利”命名規(guī)則做了合理的簡(jiǎn)化,下述的命名規(guī)則簡(jiǎn)單易用,比較適合于Windows應(yīng)用軟件的開發(fā)。 【規(guī)則2-1】類名和函數(shù)名用大寫字母開頭的單詞組合而成。 例如: class
14、Node; / 類名 class LeafNode;/ 類名 voidDraw(void;/ 函數(shù)名 voidSetValue(int value;/ 函數(shù)名 【規(guī)則2-2】變量和參數(shù)用小寫字母開頭的單詞組合而成。 例如: BOOflag; intdrawMode; 【規(guī)則2-3】常量全用大寫的字母,用下劃線分割單詞。 例如: const int MAX = 100;const int MAX_LENGTH = 100; 【規(guī)則2-4】靜態(tài)變量加前綴s_(表示static)。 例如: void Init(static int s_initValue; / 靜態(tài)變量 【規(guī)則2-5】如果不得已需要
15、全局變量,則使全局變量加前綴g_(表示global)。 例如: int g_howManyPeople; / 全局變量 int g_howMuchMoney; / 全局變量 【規(guī)則2-6】類的數(shù)據(jù)成員加前綴m_(表示member),這樣可以避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)同名。 例如: void Object:SetValue(int width, int height m_width = width; m_height = height; 【規(guī)則2-7】為了防止某 一軟件庫(kù)中的一些標(biāo)識(shí)符和其它軟件庫(kù)中的沖突,可以為各種標(biāo)識(shí)符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫(kù)函數(shù)均以g
16、l開頭,所有常量(或宏定義)均以GL開頭。 - 縮進(jìn)格式 Tab是8個(gè)字符,于是縮進(jìn)也是8個(gè)字符.有很多怪異的風(fēng)格,他們將縮進(jìn)格式定義為4個(gè)字符(設(shè)置為2個(gè)字符!的深度,這就象試圖將PI定義為3一樣讓人難以接受. 理由是:縮進(jìn)的大小是為了清楚的定義一個(gè)塊的開始和結(jié)束.特別是當(dāng)你已經(jīng)在計(jì)算機(jī)前面呆了20多個(gè)小時(shí)了以后,你會(huì)發(fā)現(xiàn)一個(gè)大的縮進(jìn)格式使得你對(duì)程序的理解更容易. 現(xiàn)在,有一些人說,使用8個(gè)字符的縮進(jìn)使得代碼離右邊很近,在80個(gè)字符寬度的終端屏幕上看程序很難受.回答是,但你的程序有3個(gè)以上的縮進(jìn)的時(shí)候,你就應(yīng)該修改你的程序. 總之,8個(gè)字符的縮進(jìn)使得程序易讀,還有一個(gè)附加的好處,就是它能在你
17、將程序變得嵌套層數(shù)太多的時(shí)候給你警告.這個(gè)時(shí)候,你應(yīng)該修改你的程序. - 大符號(hào)的位置 另外一個(gè)C程序編程風(fēng)格的問題是對(duì)大括號(hào)的處理.同縮進(jìn)大小不同,幾乎沒有什么理由去選擇一種而不選擇另外一種風(fēng)格,但有一種推薦的風(fēng)格,它是Kernighan和Ritchie的經(jīng)典的那本書帶來的,它將開始的大括號(hào)放在一行的最后,而將結(jié)束大括號(hào)放在一行的第一位,如下所示: if (x is true we do y 然而,還有一種特殊的情況:命名函數(shù):開始的括號(hào)是放在下一行的第一位,如下: int function(int x body of function 所有非正統(tǒng)的人會(huì)非難這種不一致性,但是,所有思維正常的
18、人明白: (第一 K&R是_對(duì)_的,(第二如果K&R不對(duì),請(qǐng)參見第一條. (:-.另外,函數(shù)也是特殊的,不一定非得一致. 需要注意的是結(jié)束的括號(hào)在它所占的那一行是空的,_除了_它跟隨著同一條語句的繼續(xù)符號(hào).如"while"在do-while循環(huán)中,或者"else"在if語句中.如下: do body of do-loop while (condition; 以及 if (x = y . else if (x > y . else . 理由: K&R. 另外,注意到這種大括號(hào)的放置方法減小了空行的數(shù)量,但卻沒有減少可讀性.于是
19、,在屏幕大小受到限制的時(shí)候,你就可以有更多的空行來寫些注釋了. - 命名系統(tǒng) C是一種簡(jiǎn)潔的語言,那么,命名也應(yīng)該是簡(jiǎn)潔的.同MODULE-2以及ASCAL語言不同的是,C程序員不使用諸如ThisVariableIsATemporaryCounter之類的命名方式.一 個(gè)C語言的程序員會(huì)將之命名為"tmp",這很容易書寫,且并不是那么難以去理解. 然而,當(dāng)混合類型的名字不得不出現(xiàn)的時(shí)候,描述性名字對(duì)全局變量來說是必要的了.調(diào)用一個(gè)名為"foo"全局的函數(shù)是很讓人惱火的.全局變量(只有你必須使用的時(shí)候才使用它 ,就象全局函數(shù)一樣,需要描述性的命名方式.假如
20、你有一個(gè)函數(shù)用來計(jì)算活動(dòng)用戶的數(shù)量,你應(yīng)該這樣命名-"count_active_users("-或另外的相近的形式,你不應(yīng)命名為"cntusr(". 有一種稱為Hungarian命名方式,它將函數(shù)的類型編碼寫入變量名中,這種方式是腦子有毛病的一種表現(xiàn)-編譯器知道這個(gè)類型而且會(huì)去檢查它,而這樣只會(huì)迷惑程序員. -知道為什么Micro$oft為什么會(huì)生產(chǎn)這么多"臭蟲"程序了把!. 局部變量的命名應(yīng)該短小精悍.假如你有一個(gè)隨機(jī)的整數(shù)循環(huán)計(jì)數(shù)器,它有可能有"i",如果沒有任何可能使得它能被誤解的話,將其寫作"lo
21、op_counter"是效率低下的.同樣的,""tmp"可以是任何臨時(shí)數(shù)值的函數(shù)變量. 如果你害怕混淆你的局部變量的名字,還有另外一個(gè)問題,就是稱 function-growth-hormone-imbalancesyndrome. - 函數(shù) 函數(shù)應(yīng)該短小而迷人,而且它只作一件事情.它應(yīng)只覆蓋一到兩個(gè)屏幕(80*24一屏,并且只作一件事情,而且將它做好.(這不就是UNIX的風(fēng)格嗎,譯者注. 一個(gè)函數(shù)的最大長(zhǎng)度和函數(shù)的復(fù)雜程度以及縮進(jìn)大小成反比.于是,如果你已經(jīng)寫了簡(jiǎn)單但長(zhǎng)度較長(zhǎng)的的函數(shù),而且你已經(jīng)對(duì)不同的情況做了很多很小的事情,寫一個(gè)更長(zhǎng)一點(diǎn)的函數(shù)也是無
22、所謂的. 然而,假如你要寫一個(gè)很復(fù)雜的函數(shù),而且你已經(jīng)估計(jì)到假如一般人讀這個(gè)函數(shù),他可能都不知道這個(gè)函數(shù)在說些什么,這個(gè)時(shí)候,使用具有描述性名字的有幫助的函數(shù). 另外一個(gè)需要考慮的是局部變量的數(shù)量.他們不應(yīng)該超過5-10個(gè),否則你有可能會(huì)出錯(cuò).重新考慮這個(gè)函數(shù),將他們分割成更小的函數(shù).人的大腦通??梢院苋菀椎挠涀?件不同的事情,超過這個(gè)數(shù)量會(huì)引起混亂.你知道你很聰明,但是你可能仍想去明白2周以前的做的事情. - 注釋 注釋是一件很好的事情,但是過多的注釋也是危險(xiǎn)的,不要試圖區(qū)解釋你的代碼是注釋如何如何的好:你應(yīng)該將代碼寫得更好,而不是花費(fèi)大量的時(shí)間去解釋那些糟糕的代碼. 通常情況下,你的注釋是
23、說明你的代碼做些什么,而不是怎么做的.而且,要試圖避免將注釋插在一個(gè)函數(shù)體里:假如這個(gè)函數(shù)確實(shí)很復(fù)雜,你需要在其中有部分的注釋,你應(yīng)該回到第四章看看 .你可以寫些簡(jiǎn)短的注釋來注明或警告那些你認(rèn)為特別聰明(或極其丑陋的部分,但是你必須要避免過多.取而代之的是,將注釋寫在函數(shù)前,告訴別人它做些什么事情,和可能為什么要這樣做. - 語法雜項(xiàng): A,運(yùn)算符前后要有各一個(gè)空格。 B,在開始圓括號(hào)和后一個(gè)字符,以及結(jié)束圓括號(hào)和上一個(gè)字符中不出現(xiàn)空格。不要在語句中出現(xiàn)不必要的括號(hào)。如 if (I=42 then 中,括號(hào)就是不必要的。 - 一、程序風(fēng)格: 1、嚴(yán)格采用階梯層次組織程序代碼: 各層次縮進(jìn)的分格
24、采用VC的缺省風(fēng)格,即每層次縮進(jìn)為4格,括號(hào)位于下一行。要求相匹配的大括號(hào)在同一列,對(duì)繼行則要求再縮進(jìn)4格。例如: 2、提示信息字符串的位置 在程序中需要給出的提示字符串,為了支持多種語言的開發(fā),除了一些給調(diào)試用的臨時(shí)信息外,其他所有的提示信息必須定義在資源中。 3、對(duì)變量的定義,盡量位于函數(shù)的開始位置。 - 二、命名規(guī)則: 1、變量名的命名規(guī)則 、變量的命名規(guī)則要求用“匈牙利法則”。即開頭字母用變量的類型,其余部分用變量的英文意思或其英文意思的縮寫,盡量避免用中文的拼音,要求單詞的第一個(gè)字母應(yīng)大寫。 即: 變量名=變量類型+變量的英文意思(或縮寫) 對(duì)非通用的變量,在定義時(shí)加入注釋說明,變量
25、定義盡量可能放在函數(shù)的開始處。 見下表: bool(BOOL 用b開頭 bIsParent byte(BYTE 用by開頭 byFlag short(int 用n開頭 nStepCount long(LONG 用l開頭 lSum char(CHAR 用c開頭 cCount float(FLOAT 用f開頭 fAvg double(DOUBLE 用d開頭 dDeta void(VOID 用v開頭 vVariant unsigned int(WORD) 用w開頭 wCount unsigned long(DWORD 用dw開頭 dwBroad HANDLE(HINSTANCE) 用h開頭 hHan
26、dle DWORD 用dw開頭 dwWord LPCSTR(LPCTSTR 用str開頭 strString 用0結(jié)尾的字符串 用sz開頭 szFileName 對(duì)未給出的變量類型要求提出并給出命名建議給技術(shù)委員會(huì)。 、指針變量命名的基本原則為: 對(duì)一重指針變量的基本原則為: “p”+變量類型前綴+命名 如一個(gè)float*型應(yīng)該表示為pfStat 對(duì)多重指針變量的基本規(guī)則為: 二重指針: “pp”+變量類型前綴+命 名 三重指針: “ppp”+變量類型前綴+命名 . 、全局變量用g_開頭,如一個(gè)全局的長(zhǎng)型變量定義為g_lFailCount,即:變量名=g_+變量類型+變量的英文意思(或縮寫)
27、、靜態(tài)變量用s_開頭,如一個(gè)靜態(tài)的指針變量定義為s_plPerv_Inst,即: 變量名=s_+變量類型+變量的英文意思(或縮寫) 、成員變量用m_開頭,如一個(gè)長(zhǎng)型成員變量定義為m_lCount;即:變量名=m_+變量類型+變量的英文意思(或縮寫) 、對(duì)枚舉類型(enum)中的變量,要求用枚舉變量或其縮寫做前綴。并且要求用大寫。 如:enum cmEMDAYS EMDAYS_MONDAY; EMDAYS_TUESDAY; ; 、對(duì)struct、union、class變量的命名要求定義的類型用大寫。并要加上前綴,其內(nèi)部變量的命名規(guī)則與變量命名規(guī)則一致。 結(jié)構(gòu)一般用S開頭 如:struct Scm
28、NPoint int nX;/點(diǎn)的X位置 int nY; /點(diǎn)的Y位置 ; 聯(lián)合體一般用U開頭 如: union UcmLPoint long lX; long lY; 類一般用C開頭 如: class CcmFPoint public: float fPoint; ; 對(duì)一般的結(jié)構(gòu)應(yīng)該定義為類模板,為以后的擴(kuò)展性考慮 如: template class CcmTVector3d public: TYPE x,y,z; ; 、對(duì)常量(包括錯(cuò)誤的編碼)命名,要求常量名用大寫,常量名用英文表達(dá)其意思。 如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B 其中CM表
29、示類別。 、對(duì)const 的變量要求在變量的命名規(guī)則前加入c_,即:c_+變量命名規(guī)則;例如: const char* c_szFileName; - 2、 函數(shù)的命名規(guī)范: 函數(shù)的命名應(yīng)該盡量用英文表達(dá)出函數(shù)完成的功能。遵循動(dòng)賓結(jié)構(gòu)的命名法則,函數(shù)名中動(dòng)詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長(zhǎng)度不得少于8個(gè)字母。 例如: long cmGetDeviceCount(; 3、函數(shù)參數(shù)規(guī)范: 、 參數(shù)名稱的命名參照變量命名規(guī)范。 、 為了提高程序的運(yùn)行效率,減少參數(shù)占用的堆棧,傳遞大結(jié)構(gòu)的參數(shù),一律采用指針或引用方式傳遞。 、 為了便于其他程序員識(shí)別某個(gè)指針參數(shù)是入口參數(shù)還是出口參數(shù),同時(shí)便
30、于編譯器檢查錯(cuò)誤,應(yīng)該在入口參數(shù)前加入const標(biāo)志。如: cmCopyString(const char * c_szSource, char * szDest 4、引出函數(shù)規(guī)范: 對(duì)于 從動(dòng)態(tài)庫(kù)引出作為二次開發(fā)函數(shù)公開的函數(shù),為了能與其他函數(shù)以及Windows的函數(shù)區(qū)分,采用類別前綴+基本命名規(guī)則的方法命名。例如:在對(duì)動(dòng)態(tài)庫(kù)中引出的一個(gè)圖象編輯的函數(shù)定義為 imgFunctionname(其中img為image縮寫。 現(xiàn)給出三種庫(kù)的命名前綴: 、 對(duì)通用函數(shù)庫(kù),采用cm為前綴。 、 對(duì)三維函數(shù)庫(kù),采用vr為前綴。 、 對(duì)圖象函數(shù)庫(kù),采用img為前綴。 對(duì)宏定義,結(jié)果代碼用同樣的前綴。 5、
31、文件名(包括動(dòng)態(tài)庫(kù)、組件、控件、工程文件等的命名規(guī)范: 文件名的命名要求表達(dá)出文件的內(nèi)容,要求文件名的長(zhǎng)度不得少于5個(gè)字母,嚴(yán)禁使用象file1,myfile之類的文件名。 - 三、注釋規(guī)范: 1、函數(shù)頭的注釋 對(duì)于函數(shù),應(yīng)該從“功能”,“參數(shù)”,“返回值”、“主要思路”、“調(diào)用方法”、“日期”六個(gè)方面用如下格式注釋: /程序說明開始 /=/ / 功能: 從一個(gè)String 中刪除另一個(gè)String。 / 參數(shù): strByDelete,strToDelete / (入口) strByDelete: 被刪除的字符串(原來的字符串) / (出口) strToDelete: 要從上個(gè)字符串中刪除的
32、字符串。 / 返回: 找到并刪除返回1,否則返回0。(對(duì)返回值有錯(cuò)誤編碼的要/ 求列出錯(cuò)誤編碼)。 / 主要思路:本算法主要采用循環(huán)比較的方法來從strByDelete中找到 / 與strToDelete相匹配的字符串,對(duì)多匹配strByDelete / 中有多個(gè)strToDelete子串)的情況沒有處理。請(qǐng)參閱: / 書名. / 調(diào)用方法:. / 日期:起始日期,如:2000/8/21.9:40-2000/8/23.21:45 /=/ 函數(shù)名( - /程序說明結(jié)束 、 對(duì)于某些函數(shù),其部分參數(shù)為傳入值,而部分參數(shù)為傳出值,所以對(duì)參數(shù)要詳細(xì)說明該參數(shù)是入口參數(shù),還是出口參數(shù),對(duì)于某些意義不明確
33、的參數(shù)還要做詳細(xì)說明(例如:以角度作為參數(shù)時(shí),要說明該角度參數(shù)是以弧度(PI),還是以度為單位),對(duì)既是入口又是出口的變量應(yīng)該在入口和出口處同時(shí)標(biāo)明。等等。 、 函數(shù)的注釋應(yīng)該放置在函數(shù)的頭文件中,在實(shí)現(xiàn)文件中的該函數(shù)的實(shí)現(xiàn)部分應(yīng)該同時(shí)放置該注釋。 、 在注釋中應(yīng)該詳細(xì)說明函數(shù)的主要實(shí)現(xiàn)思路、特 別要注明自己的一些想法,如果有必要?jiǎng)t應(yīng)該寫明對(duì)想法產(chǎn)生的來由。對(duì)一些模仿的函數(shù)應(yīng)該注釋上函數(shù)的出處。 、 在注釋中詳細(xì)注明函數(shù)的適當(dāng)調(diào)用方法,對(duì)于返回值的處理方法等。在注釋中要強(qiáng)調(diào)調(diào)用時(shí)的危險(xiǎn)方面,可能出錯(cuò)的地方。 、 對(duì)日期的注釋要求記錄從開始寫函數(shù)到結(jié)束函數(shù)的測(cè)試之間的日期。 、 對(duì)函數(shù)注釋開始到
34、函數(shù)命名之間應(yīng)該有一組用來標(biāo)識(shí)的特殊字符串。 如果算法比較復(fù)雜,或算法中的變量定義與位置有關(guān),則要求對(duì)變量的定義進(jìn)行圖解。對(duì)難以理解的算法能圖解盡量圖解。 - 2、變量的注釋: 對(duì)于變量的注釋緊跟在變量的后面說明變量的作用。原則上對(duì)于每個(gè)變量應(yīng)該注釋,但對(duì)于意義非常明顯的變量,如:i,j等循環(huán)變量可以不注釋。 例如: long lLineCount /線的根數(shù)。 - 3、文件的注釋: 文件應(yīng)該在文件開頭加入以下注釋: / / 工程: 文件所在的項(xiàng)目名。 / 作者:*,修改者:* / 描述:說明文件的功能。 / 主要函數(shù): / 版本: 說明文件的版本,完成日期。 / 修改: 說明對(duì)文件的修改內(nèi)容
35、、修改原因以及修改日期。 / 參考文獻(xiàn): . / 為了頭文件被重復(fù)包含要求對(duì)頭文件進(jìn)行定義如下: #ifndef _FILENAME_H_ #define _FILENAME_H_ 其中FILENAME為頭文件的名字。 - 4、其他注釋: 在函數(shù)內(nèi)我們不需要注釋每一行語句。但必須在各功能模塊的每一主要部分之前添加塊注釋,注釋每一組語句,在循環(huán)、流程的各分支等,盡可能多加以注釋。 其中的循環(huán)、條件、選擇等位置必須注釋。 對(duì)于前后順序不能顛倒的情況,建議在注釋中增加序號(hào)。 例如: 在其他順序執(zhí)行的程序中,每隔35行語句,必須加一個(gè)注釋,注明這一段語句所組成的小模塊的作用。對(duì)于自己的一些比較獨(dú)特的思
36、想要求在注釋中標(biāo)明。 - 四、程序健壯性: 1、函數(shù)的返回值規(guī)范: 對(duì)于函數(shù)的返回位置,盡量保持單一性,即一個(gè) 函數(shù)盡量做到只有一個(gè)返回位置。(單入口單出口。 要求大家統(tǒng)一函數(shù)的返回值,所有的函數(shù)的返回值都將以編碼的方式返回。 例如編碼定義如下: #define CM_POINT_IS_NULL CMMAKEHR(0X200 : : 建議函數(shù)實(shí)現(xiàn)如下: long 函數(shù)名(參數(shù), long lResult; /保持錯(cuò)誤號(hào) lResult=CM_OK; /如果參數(shù)有錯(cuò)誤則返回錯(cuò)誤號(hào) if(參數(shù)=NULL lResult=CM_POINT_IS_NULL; goto END; END: return
37、 lResult; 2、關(guān)于goto的應(yīng)用: 對(duì)goto語句的應(yīng)用,我們要求盡量少用goto語句。對(duì)一定要用的地方要求只能向后轉(zhuǎn)移。 3、資源變量的處理(資源變量是指消耗系統(tǒng)資源的變量): 對(duì)資源變量一定賦初值。分配的資源在用完后必須馬上釋放,并重新賦值。 4、對(duì)復(fù)雜的條件判斷,為了程序的可讀性,應(yīng)該盡量使用括號(hào)。 例:if(szFileName!=NULL&&(lCount>=0|(bIsReaded=TRUE - 五、可移植性: 1、高質(zhì)量的代碼要求能夠跨平臺(tái),所以我們的代碼應(yīng)該考慮到對(duì)不同的平臺(tái)的支持,特別是對(duì)windows98和windowsnt的支持。 2、由于
38、C語言的移植性比較好,所以對(duì)算法函數(shù)要求用C代碼,不能用C+代碼。 3、對(duì)不同的硬件與軟件的函數(shù)要做不同的處理 - 5 常用縮寫詞 原詞 縮寫 addition add answer ans array arr average avg buffer buf或buff capture cap或capt check chk count cnt column col control ctrl decode dec define def delete del destination dst或dest display disp division div encode enc environment en
39、v error err float flt frequency freq header hdr index idx image img increment inc initalize init iteration itr length len memory mem middle mid make mk message msg multiplication mul number num operand opnd optimization opt operator optr packet pkt positon pos previous pre或prev payload type pt point
40、er ptr return code rc record rcd receive recv result res return ret source src stack stk string str subtraction sub table tab temporary tmp或temp total tot time stamp ts value val - 6 結(jié)語 沒有一種命名規(guī)則可以讓所有的程序員贊同。而這多種命名規(guī)則也確實(shí)各有利弊。 沒有必要花太多的精力試圖發(fā)明最好的命名規(guī)則, 而是應(yīng)當(dāng)制定一種令大多數(shù)項(xiàng)目成員滿意的命名規(guī)則并切實(shí)執(zhí)行。 標(biāo)識(shí)符命名的一致性自然會(huì)體現(xiàn)出代碼 的優(yōu)雅。 當(dāng)
41、然,如果你的程序使用了第三方的代碼,而這些模塊經(jīng)驗(yàn)證確實(shí)是正確無誤的。 那么也沒有必要一味追求命名的一致性,而去修改這些已經(jīng)定型的模塊中的函數(shù)和變量名。 - 查看文章 c語言命名規(guī)范2009-09-07 17:31比較著名的命名規(guī)則當(dāng)推Microsoft公司的“匈牙利”法,該命名規(guī)則的主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。例如所有的字符變量均以ch為前綴,若是指針變量則追加前綴p。如果一個(gè)變量由ppch開頭,則表明它是指向字符指針的指針。 “匈牙利”法最大的缺點(diǎn)是煩瑣,例如 int i, j, k; float x, y, z; 倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫成
42、int iI, iJ, ik; / 前綴 i表示int類型 float fX, fY, fZ; / 前綴 f表示float類型 如此煩瑣的程序會(huì)讓絕大多數(shù)程序員無法忍受。 據(jù)考察,沒有一種命名規(guī)則可以讓所有的程序員贊同,程序設(shè)計(jì)教科書一般都不指定命名規(guī)則。命名規(guī)則對(duì)軟件產(chǎn)品而言并不是“成敗悠關(guān)”的事,我們不要化太多精力試圖發(fā)明世界上最好的命名規(guī)則,而應(yīng)當(dāng)制定一種令大多數(shù)項(xiàng)目成員滿意的命名規(guī)則,并在項(xiàng)目中貫徹實(shí)施。 - 3.1 共性規(guī)則 本節(jié)論述的共性規(guī)則是被大多數(shù)程序員采納的,我們應(yīng)當(dāng)在遵循這些共性規(guī)則的前提下,再擴(kuò)充特定的規(guī)則,如3.2節(jié)。 l 【規(guī)則3-1-1】標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可
43、望文知意,不必進(jìn)行“解碼”。 標(biāo)識(shí)符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。程序中的英文單詞一般不會(huì)太復(fù)雜,用詞應(yīng)當(dāng)準(zhǔn)確。例如不要把CurrentValue寫成NowValue。 l 【規(guī)則3-1-2】標(biāo)識(shí)符的長(zhǎng)度應(yīng)當(dāng)符合“min-length && max-information”原則。 幾十年前老ANSI C規(guī)定名字不準(zhǔn)超過6個(gè)字符,現(xiàn)今的C+/C不再有此限制。一般來說,長(zhǎng)名字能更好地表達(dá)含義,所以函數(shù)名、變量名、類名長(zhǎng)達(dá)十幾個(gè)字符不足為怪。那么名字是否越長(zhǎng)約好?不見得! 例如變量名maxval就比maxValueUntilOverflow好用。單字符的名字也是有用的,常見的如i,j,k,m,n,x,y,z等,它們通??捎米骱瘮?shù)內(nèi)的局部變量。 l 【規(guī)則3-1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。 例如Windows應(yīng)用程序的標(biāo)識(shí)符通常采用“大小寫”混排的方式,如AddChild。而Unix應(yīng)用程序的標(biāo)識(shí)符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類風(fēng)格混在一起用。 l 【規(guī)則3-1-4】程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符。 例 如: int x, X; / 變量x 與 X 容易混淆 void f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校教學(xué)成果表格
- 農(nóng)學(xué)作物種植技術(shù)測(cè)試題及答案解析
- 高效辦公數(shù)字化解決方案實(shí)踐指南
- 財(cái)務(wù)人員擔(dān)保協(xié)議書
- 水資源智能監(jiān)控與管理合同
- 金融科技反欺詐技術(shù)合作協(xié)議
- 基于人工智能的智能種植管理系統(tǒng)優(yōu)化實(shí)踐
- 月子中心月嫂服務(wù)合同
- 建筑裝修行業(yè)施工安全責(zé)任書
- 西方童話格林童話讀后感和兒童成長(zhǎng)影響
- 智能割草機(jī)器人的概述外文翻譯
- 井下作業(yè)工:初級(jí)井下作業(yè)工考試答案二
- 學(xué)生心理健康一生一策檔案模板
- 《胸外按壓》課件
- 2024屆南通二模(又蘇北七市二模)數(shù)學(xué)試題
- 北師大版六年級(jí)下冊(cè)書法練習(xí)指導(dǎo)教案教學(xué)設(shè)計(jì)
- 江西省南昌市2024屆高三一模語文試題及答案解析
- 2023年小學(xué)音樂2022版新課程標(biāo)準(zhǔn)考試測(cè)試題及答案(共五套)
- 第一章村集體經(jīng)濟(jì)組織會(huì)計(jì)制度講解
- 湖北煙草公司招聘考試真題
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論