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

下載本文檔

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

文檔簡介

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

2、個原則,2,float b, c10; void abc(void) float zongfen = 0; int d; for( d = 0; d 0) zongfen += cb; b = zongfen /10; 這段程序在做什么? 這段程序是否有錯誤? 這程序中存在哪些不良的書寫風(fēng)格?它們可能會引起什么后果,程序?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)識符,標(biāo)

3、識符的命名要清晰、明了,有明確含義。使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。 標(biāo)識符應(yīng)當(dāng)采用英文單詞或其組合,切忌使用漢語拼音來命名。 壞的命名: 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)識符,6,1.1.3 指針變量的命名 對于指針

5、的定義,名稱大小寫根據(jù)指針為全局/局部變量來定,但指針名必須以小寫的“p”開頭。 如: int *pday; /全局指針 int *pday; /局部指針 int *ppday; /指針的指針 1.1.4 在某一模塊中使用的變量,變量名的開始需有模塊名。 如: 模塊 key.c 中的變量: int ikeynum; int ikeynumbuff10,一、標(biāo)識符,7,一、標(biāo)識符,1.2 函數(shù)名 函數(shù)名的命名應(yīng)象全局變量一樣采用首字母大寫方式(駱駝式)。 函數(shù)名的開始應(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)該以盡可能一目了然的形式書寫語句。這就像保持書桌整潔可以使你容易找到東西一樣。 2.1 用縮進(jìn)格式書寫代碼 函數(shù)或過程的開始、結(jié)構(gòu)定義及循環(huán)、判斷等語句中的代碼都要采用縮進(jìn); 縮進(jìn)的空格數(shù)為4個; 使用空格鍵,不使用tab鍵; 程序塊的分界符(和)應(yīng)各獨(dú)占一行。 例: f

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

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

9、非多此一舉,而是為了防止別人誤以為你忘了default 處理。 switch 語句的標(biāo)準(zhǔn)格式是: switch (variable) case value1 : break; case value2 : break; default : break;,16,四、常量,這是一個根據(jù)lcd的列來計算像素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ù)字或字符串,將會有什么麻煩? (1) 程序的可讀性(可理解性)變差。程序員自己會忘記那些數(shù)字或字符串是什么意思,用戶則更加不知它們從何處來、表示什么。 (2) 在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯誤。 (3) 如果要修改數(shù)字或字符串,則會在很多地方改動,既麻煩又容易出錯。 4.2 定義常量的方法 (1)#define 宏定義 (2)const 常量 (3)enum 枚舉

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

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

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

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

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ù)的注釋 /* * 可編輯文本框選項左移 * * * * 功能描述 : 按向左鍵時,可編輯文本框的編輯位向左移一位。 * * 輸入?yún)?shù) : pbox 指向可編輯文本框的指針 * * 返回參數(shù) : 無 * * 作 者 : 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論