軟件研究室培訓(xùn)(編程規(guī)范)_第1頁(yè)
軟件研究室培訓(xùn)(編程規(guī)范)_第2頁(yè)
軟件研究室培訓(xùn)(編程規(guī)范)_第3頁(yè)
軟件研究室培訓(xùn)(編程規(guī)范)_第4頁(yè)
軟件研究室培訓(xùn)(編程規(guī)范)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編程規(guī)范,1,1、程序員花更多的時(shí)間在調(diào)試、維護(hù)和升級(jí)已有代碼上,而不是編寫新的代碼; 2、程序最重要的是正確性,其次是可維護(hù)性,最后才是效率; 3、學(xué)習(xí)如何寫優(yōu)美的程序與學(xué)習(xí)如何正確地編寫代碼同樣重要; 4、讓程序盡量簡(jiǎn)單易懂,即使違背了某些規(guī)則也無(wú)關(guān)緊要; 5、一個(gè)運(yùn)行正常但沒(méi)有注釋的程序如同一個(gè)等待爆炸的定時(shí)炸彈,因?yàn)樵缤頃?huì)有人修改或升級(jí)這個(gè)程序; 6、好風(fēng)格應(yīng)該成為一種習(xí)慣。如果你在開(kāi)始寫代碼時(shí)就關(guān)心風(fēng)格問(wèn)題,如果你花時(shí)間去審視和改進(jìn)它,你將會(huì)逐漸養(yǎng)成一種好的編程習(xí)慣。一旦這種習(xí)慣變成自動(dòng)的東西,你的潛意識(shí)就會(huì)幫你照料許多細(xì)節(jié)問(wèn)題,甚至你在工作壓力下寫出的代碼也會(huì)更好,關(guān)于編程規(guī)范的幾

2、個(gè)原則,2,float b, c10; void abc(void) float zongfen = 0; int d; for( d = 0; d 0) zongfen += cb; b = zongfen /10; 這段程序在做什么? 這段程序是否有錯(cuò)誤? 這程序中存在哪些不良的書寫風(fēng)格?它們可能會(huì)引起什么后果,程序?qū)嵗?3,float b, c10; void abc(void) float zongfen = 0; int d; for( d = 0; d 0) zongfen += cb; b = zongfen /10,有了哪些改進(jìn)? 你認(rèn)為還有什么地方需要改進(jìn),4,一、標(biāo)識(shí)符,標(biāo)

3、識(shí)符的命名要清晰、明了,有明確含義。使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。 標(biāo)識(shí)符應(yīng)當(dāng)采用英文單詞或其組合,切忌使用漢語(yǔ)拼音來(lái)命名。 壞的命名: int a / age1 / xueshengage; 好的命名: int studentage; 1.1 變量名 1.1.1 不同作用域變量的命名 局部變量以小寫字母命名; 全局變量以首字母大寫方式命名(駱駝式); 定義類型和宏定義常數(shù)以大寫字母命名; 變量的作用域越大,它的名字所帶有的信息就應(yīng)該越多。 局部變量: int student_age; 全局變量: int studentage; 宏定義常數(shù):#define stud

4、ent_num 10 類型定義: typedef int16s int,5,1.1.2 不同類型變量的命名(匈牙利命名法) 匈牙利命名法是一種命名約定。匈牙利命名法把變量的類型 (或者它的預(yù)期使用)等信息編碼在變量名中。 一些常用的匈牙利命名法前綴 數(shù)據(jù)類型 前綴 例子 char c cinchar unsigned char uc ucoutchar int i ireturnvalue unsigned int ui uicontrolword long l lnumrecs float f flength double d darea,一、標(biāo)識(shí)符,6,1.1.3 指針變量的命名 對(duì)于指針

5、的定義,名稱大小寫根據(jù)指針為全局/局部變量來(lái)定,但指針名必須以小寫的“p”開(kāi)頭。 如: int *pday; /全局指針 int *pday; /局部指針 int *ppday; /指針的指針 1.1.4 在某一模塊中使用的變量,變量名的開(kāi)始需有模塊名。 如: 模塊 key.c 中的變量: int ikeynum; int ikeynumbuff10,一、標(biāo)識(shí)符,7,一、標(biāo)識(shí)符,1.2 函數(shù)名 函數(shù)名的命名應(yīng)象全局變量一樣采用首字母大寫方式(駱駝式)。 函數(shù)名的開(kāi)始應(yīng)以“ 模塊名_ ”的格式注明函數(shù)所屬模塊。 例如: (1)key.c模塊的函數(shù) void key_init(void); voi

6、d key_startscan(void); void key_stopscan(void); (2)tmr.c模塊的函數(shù) void tmr_init(void); void tmr_start(tmr_id tmr); void tmr_stop(tmr_id tmr,8,二、排版,名字的合理選擇可以幫助理解程序。同樣,也應(yīng)該以盡可能一目了然的形式書寫語(yǔ)句。這就像保持書桌整潔可以使你容易找到東西一樣。 2.1 用縮進(jìn)格式書寫代碼 函數(shù)或過(guò)程的開(kāi)始、結(jié)構(gòu)定義及循環(huán)、判斷等語(yǔ)句中的代碼都要采用縮進(jìn); 縮進(jìn)的空格數(shù)為4個(gè); 使用空格鍵,不使用tab鍵; 程序塊的分界符(和)應(yīng)各獨(dú)占一行。 例: f

7、or(i = 0; i 0) /遇到負(fù)分,記為0分 total_score += fscorei;,9,二、排版,2.2 其他書寫格式 2.2.1 長(zhǎng)語(yǔ)句 較長(zhǎng)的語(yǔ)句(多于80字符)要分成多行書寫; 長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首; 劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀; 不允許把多個(gè)短語(yǔ)句寫在一行中,即一行只寫一條語(yǔ)句。 例: 修改前: measdata.transtdir=transtdir*setdata.filter+transtdir*(1-setdata.filter); 修改后: measdata.transtdir = transtdir

8、 * setdata.filter + transtdir * (1 - setdata.filter,10,二、排版,2.2.2 空行和空格的使用 相對(duì)獨(dú)立的程序塊之間、變量定義之后語(yǔ)句開(kāi)始以前必須加空行 ; 逗號(hào)、分號(hào)只在后面加空格 ; 比較操作符、賦值操作符、算術(shù)操作符、邏輯操作符、位域操作符等雙目操作符的前后加空格; “!”、“”、“+”、“-”、“ / 不良的風(fēng)格,11,三、表達(dá)式和基本語(yǔ)句,3.1 運(yùn)算表達(dá)式 不要編寫太復(fù)雜的復(fù)合表達(dá)式; 例如: i = a = b 如果代碼行中的運(yùn)算符比較多,用括號(hào)確定表達(dá)式的操作順序,避免 使用默認(rèn)的優(yōu)先級(jí)。 例如: if(a | b 這樣做并

9、非多此一舉,而是為了防止別人誤以為你忘了default 處理。 switch 語(yǔ)句的標(biāo)準(zhǔn)格式是: switch (variable) case value1 : break; case value2 : break; default : break;,16,四、常量,這是一個(gè)根據(jù)lcd的列來(lái)計(jì)算像素x坐標(biāo)的函數(shù): int16u lcd_getstx(int8u col) int16u x; if(col 29) col = 29; #if lcd_mode = _vga x = 150 + (int16u)col * 8; #elif x = (int16u)col * 8; #endif r

10、eturn(x); 代碼中的數(shù)(29,8,150)都是什么意義? 這些神秘的數(shù)給程序的閱讀和維護(hù)增加了很大的難度,17,define lcd_max_col 29 /lcd最大列數(shù) #define lcd_start_x 150 /lcd起始x坐標(biāo) #define lcd_col_width 8 /lcd列寬 int16u lcd_getstx(int8u col) int16u x; if(col lcd_max_col ) col = lcd_max_col ; #if lcd_mode = _vga x = lcd_start_x + (int16u)col * lcd_col_widt

11、h ; #elif x = (int16u)col * lcd_col_width ; #endif return(x);,四、常量,18,四、常量,4.1 為什么要用常量 如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會(huì)有什么麻煩? (1) 程序的可讀性(可理解性)變差。程序員自己會(huì)忘記那些數(shù)字或字符串是什么意思,用戶則更加不知它們從何處來(lái)、表示什么。 (2) 在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯(cuò)誤。 (3) 如果要修改數(shù)字或字符串,則會(huì)在很多地方改動(dòng),既麻煩又容易出錯(cuò)。 4.2 定義常量的方法 (1)#define 宏定義 (2)const 常量 (3)enum 枚舉

12、,19,4.3 #define 宏定義 使用最廣泛,如: #define max_teacher 100 缺點(diǎn):宏定義的常量沒(méi)有類型,只進(jìn)行字符替換,沒(méi)有類型安全檢查,并且在字符替換可能會(huì)產(chǎn)生意料不到的錯(cuò)誤。 4.4 const 常量 如: const int max_student = 100; 優(yōu)點(diǎn):const 常量有數(shù)據(jù)類型,而宏常量沒(méi)有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安全檢查。 缺點(diǎn): const 常量無(wú)法在數(shù)組定義時(shí)作為數(shù)組長(zhǎng)度。如: float studentheightmax_student; /錯(cuò)誤,四、常量,20,4.5 枚舉 enumred, blue, green, y

13、ellow, white, black, color_num; 優(yōu)點(diǎn): (1) 適合一次定義批量常數(shù),尤其是在數(shù)值連續(xù)時(shí)尤為方便; (2) 枚舉常量可以作為數(shù)組長(zhǎng)度,如: float ballsizecolor_num; 缺點(diǎn):不能定義除整型外的其他類型常量,如float和double,四、常量,21,一個(gè)運(yùn)行正常但沒(méi)有注釋的程序如同一個(gè)等待爆炸的定時(shí)炸彈;而在有注釋,但注釋不正確時(shí),炸彈的當(dāng)量更大。 注釋應(yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。錯(cuò)誤的注釋不但無(wú)益反而有害。 5.1 注釋的基本概念 c 語(yǔ)言的注釋符為“/*/”。c+語(yǔ)言中,程序塊的注釋常采用“/*/”,行注釋一般采用“/”。注釋通常

14、用于: (1)版本、版權(quán)聲明; (2)函數(shù)接口說(shuō)明; (3)重要的代碼行或段落提示。 雖然注釋有助于理解代碼,但注意不可過(guò)多地使用注釋,五、注釋,22,五、注釋,5.2 注釋的準(zhǔn)確性 邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。 注釋應(yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。錯(cuò)誤的注釋不但無(wú)益反而有害。 盡量避免在注釋中使用縮寫,特別是不常用縮寫。 注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方。 5.3 變量、常量的注釋 對(duì)于所有有物理含義的變量、常量,在定義和聲明時(shí)都必須加以注釋,說(shuō)明其物理含義。變量、常量、宏的注釋應(yīng)放在其上

15、方相鄰位置或右方。 數(shù)據(jù)結(jié)構(gòu)定義和聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)成員的注釋放在此成員的右方;同一結(jié)構(gòu)中不同成員的注釋要對(duì)齊。 全局變量要有較詳細(xì)的注釋,包括對(duì)其功能、取值范圍、哪些函數(shù)或過(guò)程存取它以及存取時(shí)注意事項(xiàng)等的說(shuō)明,23,五、注釋,如: #define gui_txt_disp_mod 0 x0c /文本框內(nèi)文字顯示模式 #define gui_txt_right_disp 0 x00 /文本框內(nèi)文字左對(duì)齊顯示 #define gui_txt_left_disp 0 x04 /文本框內(nèi)文字左對(duì)齊顯示

16、#define gui_txt_centre_disp 0 x08 /文本框內(nèi)文字居中顯示 typedef struct ctr_aspect aspect; /外觀 int8u *ptxt; /文字 int8u txtfont; /字體 int8u sta; /文本框狀態(tài)模式 int8u workmod; /工作模式 txt_box,24,五、注釋,5.4 函數(shù)的注釋 /* * 可編輯文本框選項(xiàng)左移 * * * * 功能描述 : 按向左鍵時(shí),可編輯文本框的編輯位向左移一位。 * * 輸入?yún)?shù) : pbox 指向可編輯文本框的指針 * * 返回參數(shù) : 無(wú) * * 作 者 : liy-tj * */ void gui_edittxtbox_left(edit_txt_box *pbox),25,5.5 /* */ 和 / 文件頭、函數(shù)頭注釋使用“/* */”,函數(shù)內(nèi)部注釋“/” ,如:/* * get how long key has been pressed * * description : function return the time the key has been pressed. * * arguments : none * * returns : key down time in milliseconds *

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論