




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式編程規(guī)范1 基本要求1) 程序結(jié)構(gòu)清晰,簡(jiǎn)單易懂,單個(gè)函數(shù)的程序行數(shù)不得超過(guò)100 行, 每行代碼不得超過(guò) 100 列。2) 打算干什么,要簡(jiǎn)單,直接了當(dāng),代碼精簡(jiǎn),避免垃圾程序。3) 盡量使用標(biāo)準(zhǔn)庫(kù)函數(shù)和公共函數(shù)。4) 不要隨意定義全局變量,盡量使用局部變量。5) 使用括號(hào)以避免二義性。2 可讀性要求1) 可讀性第一,效率第二。2) 保持注釋與代碼完全一致。3) 每個(gè)源程序文件,都有文件頭說(shuō)明,說(shuō)明規(guī)格見(jiàn)規(guī)范。4) 每個(gè)函數(shù),都有函數(shù)頭說(shuō)明,說(shuō)明規(guī)格見(jiàn)規(guī)范。5) 主要變量(結(jié)構(gòu)、聯(lián)合、類(lèi)或?qū)ο?定義或引用時(shí),注釋能反映其含義。6) 常量定義(DEFINE )有相應(yīng)說(shuō)明。7) 處理過(guò)程的
2、每個(gè)階段都有相關(guān)注釋說(shuō)明。8) 在典型算法前都有注釋。9) 用縮進(jìn)來(lái)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量一致并以Tab 鍵為單位,定義 Tab 為 4個(gè)字節(jié)。10) 循環(huán)、分支層次不要超過(guò)五層。11) 注釋可以與語(yǔ)句在同一行,也可以在上行。12) 空行和空白字符也是一種特殊注釋。13) 一目了然的語(yǔ)句不加注釋。14) 注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。15) 注釋行數(shù)(不包括程序頭和函數(shù)頭說(shuō)明部份)應(yīng)占總行數(shù)的1/5 到1/3。3 結(jié)構(gòu)化要求1) 禁止出現(xiàn)兩條等價(jià)的支路。2) 禁止 GOTO 語(yǔ)句。3) 用 IF 語(yǔ)句來(lái)強(qiáng)調(diào)只執(zhí)行兩組語(yǔ)句中的一組。禁止ELSEGOTO 和 ELSE
3、RETURN 。4) 用 CASE 實(shí)現(xiàn)多路分支。5) 避免從循環(huán)引出多個(gè)出口。6) 函數(shù)只有一個(gè)出口。7) 不使用條件賦值語(yǔ)句。8) 避免不必要的分支。9) 不要輕易用條件分支去替換邏輯表達(dá)式。4 正確性與容錯(cuò)性要求1) 程序首先是正確,其次是優(yōu)美。2) 無(wú)法證明你的程序沒(méi)有錯(cuò)誤,因此在編寫(xiě)完一段程序后,應(yīng)先回頭檢查。3) 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。4) 所有變量在調(diào)用前必須被初始化。5) 對(duì)所有的用戶(hù)輸入,必須進(jìn)行合法性檢查。6) 不要比較浮點(diǎn)數(shù)的相等,如:*= ,不可靠7) 程序與環(huán)境或狀態(tài)發(fā)生關(guān)系時(shí),必須主動(dòng)去處理發(fā)生的意外事件,如文件能否邏輯
4、鎖定、打印機(jī)是否聯(lián)機(jī)等。8) 單元測(cè)試也是編程的一部份,提交聯(lián)調(diào)測(cè)試的程序必須通過(guò)單元測(cè)試。5 可重用性要求1) 重復(fù)使用的完成相對(duì)獨(dú)立功能的算法或代碼應(yīng)抽象為公共控件或類(lèi)。2) 公共控件或類(lèi)應(yīng)考慮OO 思想,減少外界聯(lián)系,考慮獨(dú)立性或封裝性。3) 公共控件或類(lèi)應(yīng)建立使用模板。6 編碼具體規(guī)范排版程序塊要采用縮進(jìn)風(fēng)格編寫(xiě)( 1)縮進(jìn)的空格數(shù)為4 個(gè)。( 2) 函數(shù)或過(guò)程的開(kāi)始、結(jié)構(gòu)的定義及循環(huán)、判斷等語(yǔ)句中的代碼都要采用縮進(jìn)風(fēng)格,case語(yǔ)句下的情況處理語(yǔ)句也要遵從語(yǔ)句縮進(jìn)要求。示例:intdelch(charstr,charc)inti,j;for(i=j=0;stri!=0i+) if(s
5、tri!=c) strj+=stri;strj=0( 3)在函數(shù)體的開(kāi)始、類(lèi)的定義、結(jié)構(gòu)的定義、枚舉的定義以及if、 for、 do、 while、switch、case語(yǔ)句中的程序都要采用如上的縮進(jìn)方式。大括號(hào) 和 的使用( 1)程序塊的分界符(如C/C+ 語(yǔ)言的大括號(hào) 和 )應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語(yǔ)句左對(duì)齊。示例:如下例子不符合規(guī)范。for(.)./*programcode*/ if(.)./*programcode*/voidexample_fun(void)./*programcode*/ 應(yīng)如下書(shū)寫(xiě)。for(.)./*programcode*/ if(.)./*
6、programcode*/voidexample_fun(void)./*programcode*/( 2) if、 for 、 do、 while、 case、 switch 、 default 等語(yǔ)句自占一行,且if、 for、 do、 while等語(yǔ)句的執(zhí)行語(yǔ)句部分無(wú)論多少都要加括號(hào) 。示例:如下例子不符合規(guī)范。if(pUserCR=NULL)return;應(yīng)如下書(shū)寫(xiě):if(pUserCR=NULL)return;在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對(duì)等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對(duì)等操作時(shí),如果是關(guān)系密切的立即操作符(如) ,后不應(yīng)加空格。說(shuō)明:采用這種松散
7、方式編寫(xiě)代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對(duì)的,所以, 在已經(jīng)非常清晰的語(yǔ)句中沒(méi)有必要再留空格,如果語(yǔ)句已足夠清晰則括號(hào)內(nèi)側(cè)(即左括號(hào)后面和右括號(hào)前面)不需要加空格,多重括號(hào)間不必加空格,因?yàn)樵贑 語(yǔ)言中括號(hào)已經(jīng)是最清晰的標(biāo)志了。在長(zhǎng)語(yǔ)句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時(shí)不要連續(xù)留兩個(gè)以上空格。示例:(1)逗號(hào)、分號(hào)只在后面加空格。inta,b,c;(2)比較操作符,賦值操作符=、 += ,算術(shù)操作符+、 %,邏輯操作符& 、 & ,位運(yùn)算符=MAX_TIME_V ALUE)a=b+c;a*=2;a=bA2;(3)! 、
8、、 + 、 - 、 & (地址運(yùn)算符)等單目操作符前后不加空格。*p=a/* 內(nèi)容操作* 與內(nèi)容之間*/flag=!isEmpty;/* 非操作 ! 與內(nèi)容之間*/p=&mem;/* 地址操作& 與內(nèi)容之間*/i+;/*+,- 與內(nèi)容之間*/(4)- 、 .前后不加空格。p-id=pid;/*- 指針前后不加空格*/(5)if、 for、 while、 switch 等與后面的括號(hào)間應(yīng)加空格,使if 等關(guān)鍵字更為突出、明顯。if(a=b&cd)較長(zhǎng)語(yǔ)句與表達(dá)式的書(shū)寫(xiě)處理方法( 1)較長(zhǎng)的語(yǔ)句(80 字符)要分成多行書(shū)寫(xiě),長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行, 操作符放在新行之首,劃分出的新行要
9、進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀。示例:report_or_not_flag=(tasknoMAX_ACT_TASK_NUMBER)&(n7stat_stat_item_valid(stat_item)&(act_task_tabletaskno.result_data!=0);( 2)循環(huán)、判斷等語(yǔ)句中若有較長(zhǎng)的表達(dá)式或語(yǔ)句,則要進(jìn)行適應(yīng)的劃分,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。示例:for(i=0,j=0;(ifirst_word_length)&(jsecond_word_length);i+,j+)epssn_index;repssn_ni=ssn_data
10、index.ni;注釋注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方或右方(對(duì)單條語(yǔ)句的注釋)相鄰位置,不可放在下面。示例:如下例子不符合規(guī)范。/*getreplicatesubsystemindexandnetindicator*/repssn_ind=ssn_dataindex.repssn_index;repssn_ni=ssn_dataindex.ni;將注釋與其上面的代碼用空行隔開(kāi)。示例:如下例子,顯得代碼過(guò)于緊湊。/*codeonecomments*/programcodeone/*codetwocomments*/programcodetwo應(yīng)如下書(shū)寫(xiě)/*codeonecom
11、ments*/programcodeone/*codetwocomments*/programcodetwo注釋與所描述內(nèi)容進(jìn)行同樣的縮排。說(shuō)明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:如下例子,排版不整齊,閱讀稍感不方便。voidexample_fun(void) /*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo 應(yīng)改為如下布局。voidexampleFun(void)/*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo 標(biāo)識(shí)符命名標(biāo)識(shí)符
12、的命名要清晰、明了, 有明確含義,同時(shí)使用完整的單詞或大家基本可以理解的縮寫(xiě),避免使人產(chǎn)生誤解。說(shuō)明: 較短的單詞可通過(guò)去掉“元音”形成縮寫(xiě);較長(zhǎng)的單詞可取單詞的頭幾個(gè)字母形 成縮寫(xiě);一些單詞有大家公認(rèn)的縮寫(xiě)。示例:如下單詞的縮寫(xiě)能夠被大家基本認(rèn)可。temp 可縮寫(xiě)為tmp;flag 可縮寫(xiě)為flg;statistic 可縮寫(xiě)為stat;increment 可縮寫(xiě)為inc;message可縮寫(xiě)為 msg;命名中若使用特殊約定或縮寫(xiě),則要有注釋說(shuō)明。說(shuō)明:應(yīng)該在源文件的開(kāi)始之處,對(duì)文件中所使用的縮寫(xiě)或約定,特別是特殊的縮寫(xiě),進(jìn)行必要的注釋說(shuō)明。對(duì)于變量命名,盡量不選用單個(gè)字符(如i、 j、 k.
13、) ,建議除了要有具體含義外,還能表明其變量類(lèi)型、數(shù)據(jù)類(lèi)型等,但i、 j、 k 作局部循環(huán)變量是允許的。說(shuō)明:變量,尤其是局部變量,如果用單個(gè)字符表示,很容易敲錯(cuò)(如i 寫(xiě)成 j) ,而編譯時(shí)又檢查不出來(lái),有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。示例:下面所示的局部變量名的定義方法可以借鑒。intliv_Width其變量名解釋如下:l 局部變量(Local) (其它:g 全局變量(Global) .)i 數(shù)據(jù)類(lèi)型(Interger)v 變量(Variable)(其它:c 常量(Const)Width 變量含義這樣可以防止局部變量與全局變量重名。建議 3-2:用正確的反義詞組命名具有互斥意
14、義的變量或相反動(dòng)作的函數(shù)等。說(shuō)明:下面是一些在軟件中常用的反義詞組。add/removebegin/endcreate/destroy insert/deletefirst/lastget/release increment/decrementput/get add/deletelock/unlockopen/close min/maxold/newstart/stopnext/previoussource/targetshow/hide send/receivesource/destination cut/pasteup/down示例:intmin_sum;intmax_sum;可讀性注意運(yùn)
15、算符的優(yōu)先級(jí),并用括號(hào)明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級(jí)。說(shuō)明: 防止閱讀程序時(shí)產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級(jí)與設(shè)計(jì)思想不符而導(dǎo)致程序出錯(cuò)。示例:下列語(yǔ)句中的表達(dá)式word=(high8)|low(1)if(a|b)&(a&c)(2)if(a|b)(c&d)(3)如果書(shū)寫(xiě)為high8|lowa|b&a&ca|bc&d由于high8|low=(high8)|low, a|b&a&c=(a|b)&(a&c) ,(1)(2)不會(huì)出錯(cuò),但語(yǔ)句不易理解;a|bc&d=a|( bp_datai.j-1.f2=0;parent-p_datai.j-1.f3=0;parent-p_datai.j-1.f4
16、=0;parent-p_datai.j-1.f5=0;parent-p_datai.j-1.f6=0;parent-p_datai.j-1.f7=0;parent-p_datai.j-1.f8=0;假定 b 的結(jié)構(gòu)為structB, 則可改寫(xiě)為:structB*b=&(parent-p_datai.j-1);b-f1=0;b-f2=0;b-f3=0;b-f4=0;b-f5=0;b-f6=0;b-f7=0;b-f8=0;函數(shù)、過(guò)程建議5-1 :一個(gè)函數(shù)僅完成一件功能。建議5-2:為簡(jiǎn)單功能編寫(xiě)函數(shù)。但用函數(shù)可使功說(shuō)明: 雖然為僅用一兩行就可完成的功能去編函數(shù)好象沒(méi)有必要,能明確化,增加程序可讀性
17、,亦可方便維護(hù)、測(cè)試。示例:如下語(yǔ)句的功能不很明顯。value=(ab)a:b;改為如下就很清晰了。intmax(inta,intb)return(ab)a:b);value=max(a,b);或改為如下。#defineMAX(a,b)(a)(b)(a):(b) value=MAX(a,b);建議5-3:不要設(shè)計(jì)多用途面面俱到的函數(shù)。說(shuō)明:多功能集于一身的函數(shù),很可能使函數(shù)的理解、測(cè)試、維護(hù)等變得困難。建議5-4:函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能。使用動(dòng)賓詞組為執(zhí)行某操作的函數(shù)命名。如果是OOP方法,可以只有動(dòng)詞(名詞是對(duì)象本身)。示例:參照如下方式命名函數(shù)。voidprintRecord(unsi
18、gnedintrec_ind);intinputRecord(void);unsignedchargetCrrentColor(void);建議5-5:函數(shù)的返回值要清楚、明了,讓使用者不容易忽視錯(cuò)誤情況。說(shuō)明:函數(shù)的每種出錯(cuò)返回值的意義要清晰、明了、準(zhǔn)確,防止使用者誤用、理解錯(cuò)誤或忽視錯(cuò)誤返回碼。命名規(guī)則1) 函數(shù)名: 首單詞字母全部小寫(xiě),后面代表獨(dú)立意思的單詞首字母大寫(xiě),后面的字母小寫(xiě)。如:sendMsgFlg();2) 變量名:全局變量命名規(guī)則:intg_maxCycle;char*p_strName;局部變量命名規(guī)則intmax_cycle;3) 文件名全部小寫(xiě),如:;函數(shù)返回值的處理1) 函數(shù)返回值類(lèi)型是void 時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安裝工人勞動(dòng)合同
- 興國(guó)電商知識(shí)培訓(xùn)課件
- 狼人殺好人發(fā)言稿
- 2025年噴灑車(chē)輛項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 《集成電路版圖設(shè)計(jì)與TannerEDA工具的使用》課件第1章
- 全警法律知識(shí)培訓(xùn)課件
- 護(hù)理公共基礎(chǔ)知識(shí)培訓(xùn)總結(jié)課件
- 公益慈善發(fā)言稿
- 2025版鋼結(jié)構(gòu)建筑工程承包合同執(zhí)行細(xì)則
- 二零二五版食品貼牌加工及銷(xiāo)售合作協(xié)議
- 2025屆新高考數(shù)學(xué)一二輪復(fù)習(xí)備考建議與做法 課件
- 合作試驗(yàn)協(xié)議
- 全國(guó)高中生物奧林匹克競(jìng)賽試題
- 配電房安全管理培訓(xùn)
- GB 44263-2024電動(dòng)汽車(chē)傳導(dǎo)充電系統(tǒng)安全要求
- QB/T 2660-2024 化妝水(正式版)
- 初中歷史八年級(jí)下冊(cè)單元作業(yè)設(shè)計(jì)
- 2024-2030年中國(guó)藥用安瓿瓶行業(yè)現(xiàn)狀規(guī)模及供需趨勢(shì)預(yù)測(cè)報(bào)告
- 護(hù)理團(tuán)標(biāo)解讀住院精神疾病患者攻擊行為預(yù)防
- 護(hù)士上半年護(hù)士考試題庫(kù)
- 【年產(chǎn)100萬(wàn)瓶漱口水工藝設(shè)計(jì)及物料衡算9400字(論文)】
評(píng)論
0/150
提交評(píng)論