




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、開發(fā)管理之代碼編碼規(guī)范開發(fā)管理之代碼編碼規(guī)范開發(fā)管理之代碼編碼規(guī)范開發(fā)管理之代碼編碼規(guī)范編制僅供參考審核批準(zhǔn)生效日期地址: 電話:傳真: 郵編:程序版式 TOC o 1-3 h z u 對(duì)齊程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè)。使用VC提供的Tab鍵對(duì)齊。“”和“”應(yīng)獨(dú)占一行并且位于同一列,同時(shí)引用他們的語(yǔ)句對(duì)齊之內(nèi)的代碼塊在“”右邊數(shù)格外左對(duì)齊例:正確錯(cuò)誤void Function(int x) ,“;”,“)”向前緊跟“,”后要留空格,“”;之后如果不是一行的結(jié)束,后面要留空格賦值操作符,比較,算術(shù),邏輯,第二元操作符前后加空格一元操作符!、+、-、等前后不加空格像、“.”、等前后
2、不加空格例:void Func1(int x, int y, int z); Function();b-Function(); 從左至右! + - (類型) sizeof+ - * &從右至左* / %從左至右+ -從左至右從左至右 =從左至右= !=從左至右&從左至右從左至右|從左至右&從左至右|從右至左:從右至左= += -= *= /= %= &= =|= =從左至右if 語(yǔ)句布爾變量與零值比較時(shí),不可將布爾變量直接與TRUE、FALSE或者1、0進(jìn)行比較假設(shè)布爾變量名字為flag,它與零值比較的標(biāo)準(zhǔn)if語(yǔ)句如下:if (flag)中,不需要對(duì)外公開的常量放在定義文件(*.cpp)的頭部
3、不能在類中初始化const常量,只能通過(guò)枚舉常量來(lái)解決例:錯(cuò)誤: class A const int SIZE=100; (錯(cuò)誤) int arraySIZE; 正確:class A enum SIZE1 = 100, SIZE2 = 200; / 枚舉常量int array1SIZE1;int array2SIZE2;函數(shù)參數(shù)規(guī)則參數(shù)書寫要完整,不能只寫類型,不寫參數(shù)名,如果函數(shù)沒(méi)有參數(shù),用void填充例如:void SetValue(int width, int height);/ 良好的風(fēng)格void SetValue(int, int);/ 不良的風(fēng)格float GetValue(voi
4、d);/ 良好的風(fēng)格float GetValue();/ 不良的風(fēng)格如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類型前加const,以免指針在函數(shù)體內(nèi)被意外修改;一般地,應(yīng)將目的參數(shù)放在前面,源參數(shù)放在后面例: void StrngCopy(char *strlDestintion, const har *StrSource)如果參數(shù)以值傳遞的方式傳遞對(duì)象,則宜改用“const &”方法傳遞,能提高效率避免函數(shù)有太多的參數(shù),參數(shù)個(gè)數(shù)應(yīng)盡量控制在5個(gè)以內(nèi)盡量不要使用類型和數(shù)目不確定的參數(shù) 例: int printf(const cha*format, argument);對(duì)于內(nèi)置類型參數(shù)要傳值需要傳指針
5、不傳引用的情形a)內(nèi)部需要用NULL狀態(tài)(引用沒(méi)有NULL狀態(tài))b)若參數(shù)是被new出來(lái)的,是將在函數(shù)內(nèi)被釋放返回值規(guī)則函數(shù)的輸出值結(jié)果用輸出參數(shù)(一般為指針)獲得,狀態(tài)用return返回如果返回一個(gè)對(duì)象,一般用引用傳遞,但有的情況下必須用值傳遞例如:class String/ 賦值函數(shù)String & operate=(const String &other);/ 相加函數(shù),如果沒(méi)有friend修飾則只許有一個(gè)右側(cè)參數(shù)friendString operate+( const String &s1, const String &s2); private:char *m_data; String
6、的賦值函數(shù)operate = 的實(shí)現(xiàn)如下:String & String:operate=(const String &other)if (this = &other)return *this;delete m_data;m_data = new charstrlen+1;strcpy(m_data, ;return *this;/ 返回的是 *this的引用,無(wú)需拷貝過(guò)程對(duì)于賦值函數(shù),應(yīng)當(dāng)用“引用傳遞”的方式返回String對(duì)象。如果用“值傳遞”的方式,雖然功能仍然正確,但由于return語(yǔ)句要把 *this拷貝到保存返回值的外部存儲(chǔ)單元之中,增加了不必要的開銷,降低了賦值函數(shù)的效率。例如:
7、String a,b,c;a = b; / 如果用“值傳遞”,將產(chǎn)生一次 *this 拷貝a = b = c; / 如果用“值傳遞”,將產(chǎn)生兩次 *this 拷貝String的相加函數(shù)operate + 的實(shí)現(xiàn)如下:String operate+(const String &s1, const String &s2) String temp;delete ;/ 是僅含0的字符串 = new charstrlen + strlen +1;strcpy, ;strcat, ;return temp;對(duì)于相加函數(shù),應(yīng)當(dāng)用“值傳遞”的方式返回String對(duì)象。如果改用“引用傳遞”,那么函數(shù)返回值是一個(gè)
8、指向局部對(duì)象temp的“引用”。由于temp在函數(shù)結(jié)束時(shí)被自動(dòng)銷毀,將導(dǎo)致返回的“引用”無(wú)效。例如:c = a + b; 此時(shí) a + b 并不返回期望值,c什么也得不到,流下了隱患。盡量保持函數(shù)只有唯一出口若函數(shù)返回狀態(tài),嘗試用枚舉作類型當(dāng)函數(shù)返回引用或指針時(shí),用文字描述其有效性禁止成員函數(shù)返回成員的引用或指針函數(shù)內(nèi)部規(guī)則在函數(shù)體的“入口處”,對(duì)參數(shù)的有效性進(jìn)行檢查,應(yīng)正確使用斷言(assert),斷言assert是僅在Debug版本起作用的宏,它用于檢查“不應(yīng)該”發(fā)生的情況例:void *memcpy(void *pvTo, const void *pvFrom, size_t size)
9、assert(pvTo != NULL) & (pvFrom != NULL); / 使用斷言byte *pbTo = (byte *) pvTo;/ 防止改變pvTo的地址byte *pbFrom = (byte *) pvFrom;/ 防止改變pvFrom的地址while(size - 0 )*pbTo + = *pbFrom + ;return pvTo;在函數(shù)的“出口處”,應(yīng)對(duì)return語(yǔ)句的正確性和效率進(jìn)行檢查return語(yǔ)句不可返回指向“找內(nèi)存”(內(nèi)部變量)的指針或引用,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷毀要搞清楚返回的究竟是值、指針,還是引用如果函數(shù)返回值是一個(gè)對(duì)象,要考慮ret
10、urn語(yǔ)句的效率通用規(guī)則函數(shù)的功能要單一,不要設(shè)計(jì)多用途函數(shù)函數(shù)體規(guī)模要小,盡量控制在100行代碼以內(nèi),不包括注釋和空格行盡量避免函數(shù)帶有記憶功能,相同的輸入應(yīng)當(dāng)產(chǎn)生相同的輸出(不用static變量)示例:如下函數(shù),其返回值(即功能)是不可預(yù)測(cè)的。unsigned int integer_sum( unsigned int base ) unsigned int index; static unsigned int sum = 0; / 注意,是static類型的。 / 若改為auto類型,則函數(shù)即變?yōu)榭深A(yù)測(cè)。 for (index = 1; index = base; index+) sum
11、 += index; return sum;用于出錯(cuò)處理的返回值一定要清楚引用的規(guī)則a)引用被創(chuàng)建時(shí)同時(shí)被初始化b)不能有NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián)c)一旦引用被初始化,就不能改變引用的關(guān)系d)引用的功能主要是傳遞參數(shù)和返回值C+語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、指針傳遞和引用傳遞。以下是“值傳遞”的示例程序。由于Func1函數(shù)體內(nèi)的x是外部變量n的一份拷貝,改變x的值不會(huì)影響n, 所以n的值仍然是0。void Func1(int x)x = x + 10;int n = 0;Func1(n);cout “n = ” n endl;/ n = 0以下是“指針傳
12、遞”的示例程序。由于Func2函數(shù)體內(nèi)的x是指向外部變量n的指針,改變?cè)撝羔樀膬?nèi)容將導(dǎo)致n的值改變,所以n的值成為10。void Func2(int *x)(* x) = (* x) + 10;int n = 0;Func2(&n);cout “n = ” n endl;/ n = 10以下是“引用傳遞”的示例程序。由于Func3函數(shù)體內(nèi)的x是外部變量n的引用,x和n是同一個(gè)東西,改變x等于改變n,所以n的值成為10。void Func3(int &x)x = x + 10;int n = 0;Func3(n);cout “n = ” n endl;/ n = 10對(duì)比上述三個(gè)示例程序,會(huì)發(fā)現(xiàn)
13、“引用傳遞”的性質(zhì)象“指針傳遞”,而書寫方式象“值傳遞”。實(shí)際上“引用”可以做的任何事情“指針”也都能夠做,為什么還要“引用”這東西?答案是“用適當(dāng)?shù)墓ぞ咦銮∪缙浞值墓ぷ鳌薄V羔樐軌蚝翢o(wú)約束地操作內(nèi)存中的如何東西,盡管指針功能強(qiáng)大,但是非常危險(xiǎn)。就象一把刀,它可以用來(lái)砍樹、裁紙、修指甲、理發(fā)等等,誰(shuí)敢這樣用?如果的確只需要借用一下某個(gè)對(duì)象的“別名”,那么就用“引用”,而不要用“指針”,以免發(fā)生意外。比如說(shuō),某人需要一份證明,本來(lái)在文件上蓋上公章的印子就行了,如果把取公章的鑰匙交給他,那么他就獲得了不該有的權(quán)利。內(nèi)存管理內(nèi)存分配方式有三種分配方式靜態(tài)存儲(chǔ)區(qū)分配,內(nèi)存在編譯的時(shí)候已經(jīng)分配好,這塊內(nèi)
14、存在整個(gè)運(yùn)行期間都存在,例如全局變量,static變量在棧上創(chuàng)建,執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)部局部變量都在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí),這些存儲(chǔ)變量自動(dòng)被釋放從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配,程序運(yùn)行時(shí)用malloc或new申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存常見(jiàn)的內(nèi)存錯(cuò)誤內(nèi)存分配未成功,卻使用了它。對(duì)于函數(shù)參數(shù),用asset(p!=NULL)檢查,如果是malloc或new來(lái)申請(qǐng)內(nèi)存,應(yīng)用if(p=NULL)或if(!p=NULL)來(lái)處理內(nèi)存分配雖然成功,但是尚未初始化就引用它,內(nèi)存的默認(rèn)值并不一定為空內(nèi)存分配成功,也初始化了,但越界了忘記了釋放內(nèi)存,造成內(nèi)存泄漏釋放了內(nèi)
15、存卻繼續(xù)使用它規(guī)則用malloc或new申請(qǐng)內(nèi)存后,應(yīng)立即檢查指會(huì)值是否為NULL,防止使用指針值為NULL的內(nèi)存不要忘記為數(shù)組和動(dòng)脈內(nèi)存賦值,防止將未被初始化的內(nèi)存作為右值使用防止數(shù)組或指針的下標(biāo)越界動(dòng)態(tài)內(nèi)存的申請(qǐng)與釋放必須配對(duì),防止內(nèi)存泄漏用free或delete釋放內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生“野指針”野指針的三種來(lái)源:指針變量被創(chuàng)建時(shí)沒(méi)有初化指針被free或delete后沒(méi)有被賦NULL指針不在有效期用new創(chuàng)建動(dòng)態(tài)數(shù)組,必須用delete,如:obj *objects=new obj100;delete objects;用new,delete代替malloc、calloc和freeMFC控件的命名規(guī)則CButton m_btnValueCComboBox m_cmboValue;CDialog CDlgServerstatus;CDateTimeCtrl m_dtcValue;CEdit m_editValue;CListBox m_lsbValue;CListCtrl m_lscValue;COleDateTime m_dtValue;CProgressCtrl m_prgValue;CRichEditCtrl m_reditValue;CScrollBar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專用設(shè)備零部件企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 羥基磷灰石企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 自由場(chǎng)固定觀測(cè)強(qiáng)震儀器企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 科研醫(yī)療專用白熾燈泡企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 湖南省、江西省十四校2024-2025學(xué)年高三六校第一次聯(lián)考物理試卷含解析
- 加入合同樣本
- 2024-2025學(xué)年河北省永年縣第一中學(xué)高三3月份第一次模擬考試物理試卷含解析
- 公司注冊(cè) 服務(wù)合同樣本
- 出售多層房屋合同樣本
- 供銷框架合同樣本
- 讀書知識(shí)競(jìng)賽試題含答案
- 企業(yè)全面戰(zhàn)略管理、年度經(jīng)營(yíng)計(jì)劃、預(yù)算管理、績(jī)效管理
- 中國(guó)民主同盟入盟申請(qǐng)表(樣表)
- 安全帶檢測(cè)報(bào)告(共8頁(yè))
- 壁球館施工方案
- 公司erp項(xiàng)目激勵(lì)制度
- Excel函數(shù)和公式練習(xí)
- 國(guó)際石油合同講座1018
- 某核電項(xiàng)目機(jī)械貫穿件安裝施工管理技術(shù)研究
- 基于單片機(jī)的接觸器控制器設(shè)計(jì)
- 50t汽車吊性能表
評(píng)論
0/150
提交評(píng)論