




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
嵌入式編程規(guī)范基本要求程序結(jié)構(gòu)清晰,簡單易懂,單個函數(shù)的程序行數(shù)不得超過100行,每行代碼不得超過100列。打算干什么,要簡單,直接了當,代碼精簡,避免垃圾程序。盡量使用標準庫函數(shù)和公共函數(shù)。4)不要隨意定義全局變量,盡量使用局部變量。5)使用括號以避免二義性。2可讀性要求1)可讀性第一,效率第二。2)保持注釋與代碼完全一致。3)每個源程序文件,都有文件頭說明,說明規(guī)格見規(guī)范。4)每個函數(shù),都有函數(shù)頭說明,說明規(guī)格見規(guī)范。5)主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο螅┒x或引用時,注釋能反映其含義。6)常量定義(DEFINE)有相應說明。7)處理過程的每個階段都有相關注釋說明。8)在典型算法前都有注釋。9)用縮進來顯示程序的邏輯結(jié)構(gòu),縮進量一致并以Tab鍵為單位,定義Tab為4個字節(jié)。10)循環(huán)、分支層次不要超過五層。11)注釋可以與語句在同一行,也可以在上行。12)空行和空白字符也是一種特殊注釋。一目了然的語句不加注釋。14)注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。15)注釋行數(shù)(不包括程序頭和函數(shù)頭說明部份)應占總行數(shù)的1/5至U1/3。結(jié)構(gòu)化要求禁止出現(xiàn)兩條等價的支路。禁止GOTO語句。用IF語句來強調(diào)只執(zhí)行兩組語句中的一組。禁止ELSEGOTO和ELSERETURN。用CASE實現(xiàn)多路分支。避免從循環(huán)引出多個出口。函數(shù)只有一個出口。不使用條件賦值語句。}}避免不必要的分支。不要輕易用條件分支去替換邏輯表達式。正確性與容錯性要求程序首先是正確,其次是優(yōu)美。無法證明你的程序沒有錯誤,因此在編寫完一段程序后,應先回頭檢查。改一個錯誤時可能產(chǎn)生新的錯誤,因此在修改前首先考慮對其它程序的影響。所有變量在調(diào)用前必須被初始化。5)對所有的用戶輸入,必須進行合法性檢查。6)不要比較浮點數(shù)的相等,如:10.0*0.1==1.0,不可靠7)程序與環(huán)境或狀態(tài)發(fā)生關系時,必須主動去處理發(fā)生的意外事件,如文件能否邏輯鎖定、打印機是否聯(lián)機等。8)單元測試也是編程的一部份,提交聯(lián)調(diào)測試的程序必須通過單元測試。5可重用性要求1)重復使用的完成相對獨立功能的算法或代碼應抽象為公共控件或類。2)公共控件或類應考慮OO思想,減少外界聯(lián)系,考慮獨立性或封裝性。3)公共控件或類應建立使用模板。6編碼具體規(guī)范1排版?程序塊要采用縮進風格編寫(1)縮進的空格數(shù)為4個。(2)函數(shù)或過程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷等語句中的代碼都要采用縮進風格,case語句下的情況處理語句也要遵從語句縮進要求。示例:intdelch(charstr[],charc){inti,j;for(i=j=0;str[i]!=''\0'i++){if(str[i]!=c)str[j++]=str[i];}str[j]=''\0'(3)在函數(shù)體的開始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進方式。? 大括號‘{‘和‘}’的使用(1)程序塊的分界符(如C/C++語言的大括號‘{‘和‘}‘)應各獨占一行并且位于同一列,同時與引用它們的語句左對齊。示例:如下例子不符合規(guī)范。for(...){.../*programcode*/}if(...)voidlxM…應如下書寫。for(...)} -■■/*programcode*/if(...).../*programcode*/Voidexa叫….../*programcode*/}(2)if、for、do、while、case、switch、default等語句自占一行,且if、for、do、while等語句的執(zhí)行語句部分無論多少都要加括號{}。示例:如下例子不符合規(guī)范。if(pUserCR==NULL)return;應如下書寫:if(pUserCR==NULL){return;?在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,如果是關系密切的立即操作符(如->),后不應加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,因為在C語言中括號已經(jīng)是最清晰的標志了。在長語句中,如果需要加的空格非常多,那么應該保持整體清晰,而在局部不加空格。給操作符留空格時不要連續(xù)留兩個以上空格。示例:(1)逗號、分號只在后面加空格。inta,b,c;(2)比較操作符,賦值操作符"="、"+=",算術(shù)操作符"+"、"%",邏輯操作符"&&"、"&",位運算符"<<"、"人"等雙目操作符的前后加空格。if(current_time>=MAX_TIME_VALUE)a=b+c;a*=2;a=bA2;(3)"!"、"~"、"++"、"--"、"&"(地址運算符)等單目操作符前后不加空格。*p=''a' /*內(nèi)容操作"*"與內(nèi)容之間*/flag=!isEmpty;/*非操作"!"與內(nèi)容之間*/p=&mem;/*地址操作"&"與內(nèi)容之間*/i++; /*"++”,"--"與內(nèi)容之間*/"->"、"."前后不加空格。p->id=pid;/*"->"指針前后不加空格*/if、for、while、switch等與后面的括號間應加空格,使if等關鍵字更為突出、明顯。if(a>=b&&c>d)較長語句與表達式的書寫處理方法(1)較長的語句(>80字符)要分成多行書寫,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當?shù)目s進,使排版整齊,語句可讀。示例:report_or_not_flag=((taskno<MAX_ACT_TASK_NUMBER)&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));(2)循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。示例:for(i=0,j=0;(i<first_word_length)&&(j<second_word_length);i++,j++)...//programcode}(3)若函數(shù)或過程中的參數(shù)較長,則要進行適當?shù)膭澐?。建議:一行程序以小于80字符為宜,不要寫得過長。不允許把多個短語句寫在一行中,即一行只寫一條語句。示例:如下例子不符合規(guī)范。length=0;width=0;應如下書寫length=0;width=0;相對獨立的程序塊之間、變量說明之后必須加空行。示例:如下例子不符合規(guī)范。if(!valid_ni(ni)){...//programcode}repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;6.2注釋注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面。示例:如下例子不符合規(guī)范。/*getreplicatesubsystemindexandnetindicator*/repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;將注釋與其上面的代碼用空行隔開。示例:如下例子,顯得代碼過于緊湊。/*codeonecomments*/programcodeone/*codetwocomments*/programcodetwo應如下書寫/*codeonecomments*/programcodeone/*codetwocomments*/programcodetwo注釋與所描述內(nèi)容進行同樣的縮排。說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:如下例子,排版不整齊,閱讀稍感不方便。voidexample_fun(void){/*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo}應改為如下布局。voidexampleFun(void){/*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo}3標識符命名標識符的命名要清晰、明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。說明:較短的單詞可通過去掉“元音”形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫;一些單詞有大家公認的縮寫。示例:如下單詞的縮寫能夠被大家基本認可。temp可縮寫為tmp;flag可縮寫為flg;statistic可縮寫為stat;increment可縮寫為inc;message可縮寫為msg;命名中若使用特殊約定或縮寫,則要有注釋說明。說明:應該在源文件的開始之處,對文件中所使用的縮寫或約定,特別是特殊的縮寫,進行必要的注釋說明。對于變量命名,盡量不選用單個字符(如i、j、k...),建議除了要有具體含義外,還能表明其變量類型、數(shù)據(jù)類型等,但i、j、k作局部循環(huán)變量是允許的。說明:變量,尤其是局部變量,如果用單個字符表示,很容易敲錯(如i寫成j),而編譯時又檢查不出來,有可能為了這個小小的錯誤而花費大量的查錯時間。示例:下面所示的局部變量名的定義方法可以借鑒。intliv_Width其變量名解釋如下:局部變量(Local)(其它:g全局變量(Global)...)
i 數(shù)據(jù)類型(Interger)v變量(Variable)(其它:c常量(Const)…)Width變量含義這樣可以防止局部變量與全局變量重名。建議3-2:用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等。說明:下面是一些在軟件中常用的反義詞組。add/add/removebegin/endcreate/destroyinsert/deletefirst/lastget/releaseincrement/increment/decrementput/getadd/deleteadd/deletelock/unlockopen/closemin/max old/new start/stopnext/previoussource/targetshow/hidesend/receivesource/destinationcut/paste up/down示例:intmin_sum;intmax_sum;4可讀性注意運算符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。說明:防止閱讀程序時產(chǎn)生誤解,防止因默認的優(yōu)先級與設計思想不符而導致程序出錯。示例:下列語句中的表達式word=(high<<8)|low(1)if((a|b)&&(a&c)) (2)if((a|b)<(c&d)) (3)如果書寫為high<<8|lowa|b&&a&ca|b<c&d由于high<<8|low=(high<<8)|low,a|b&&a&c=(a|b)&&(a&c),(1)(2)不會出錯,但語句不易理解;a|b<c&d=a|(b<c)&d,(3)造成了判斷條件出錯。避免使用不易理解的數(shù)字,用有意義的標識來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應直接使用數(shù)字,必須用有意義的枚舉或宏來代替。示例:如下的程序可讀性差。if(Trunk[index].trunk_state==0){Trunk[index].trunk_state=1;...//programcode}應改為如下形式。#defineTRUNK_IDLE0#defineTRUNK_BUSY1if(Trunk[index].trunk_state==TRUNK_IDLE){Trunk[index].trunk_state=TRUNK_BUSY;...//programcode}建議4」:不要使用難懂的技巧性很高的語句,除非很有必要時。說明:高技巧語句不等于高效率的程序,實際上程序的效率關鍵在于算法。示例:如下表達式,考慮不周就可能出問題,也較難理解。stat_poi+++=1;++stat_poi+=1;應分別改為如下。*stat_poi+=1;stat_poi++;//此二語句功能相當于“*stat_poi+++=1;”++stat_poi;*stat_poi+=1;//此二語句功能相當于“*++stat_poi+=1;”避免使用多層次的指針、結(jié)構(gòu)體訪問parent->p_data[i].a.b[j-1].f1=0;parent->p_data[i].a.b[j-1].f2=0;parent->p_data[i].a.b[j-1].f3=0;parent->p_data[i].a.b[j-1].f4=0;parent->p_data[i].a.b[j-1].f5=0;parent->p_data[i].a.b[j-1].f6=0;parent->p_data[i].a.b[j-1].f7=0;parent->p_data[i].a.b[j-1].f8=0;假定b的結(jié)構(gòu)為structB,則可改寫為:structB*b=&(parent->p_data[i].a.b[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;6.5函數(shù)、過程建議5-1:一個函數(shù)僅完成一件功能。建議5-2:為簡單功能編寫函數(shù)。說明:雖然為僅用一兩行就可完成的功能去編函數(shù)好象沒有必要,但用函數(shù)可使功能明確化,增加程序可讀性,亦可方便維護、測試。示例:如下語句的功能不很明顯。value=(a>b)?a:b;改為如下就很清晰了。intmax(inta,intb){return((a>b)?a:b);}value=max(a,b);或改為如下。#defineMAX(a,b)(((a)>(b))?(a):(b))value=MAX(a,b);建議5-3:不要設計多用途面面俱到的函數(shù)。說明:多功能集于一身的函數(shù),很可能使函數(shù)的理解、測試、維護等變得困難。建議
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班兒童自我管理能力的提升計劃
- 制定應對突發(fā)事件的工作方案計劃
- 財務發(fā)展實施計劃
- 四年級思想與社會上冊 家鄉(xiāng)的故事教學實錄1 北師大版
- 員工離職面談的重要性與方法計劃
- 保安工作總結(jié)計劃藥店行業(yè)保安工作的藥品儲存
- 五年級品德與社會下冊 第四單元 我們生活的地球 2 我們的地球村教學實錄 新人教版
- 《貴州圖南礦業(yè)(集團)有限公司興仁市下山鎮(zhèn)四海煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》專家組評審意見
- 《貴陽市白云區(qū)興旺鋁土礦有限公司白云區(qū)沙文鄉(xiāng)興旺鋁土礦(延續(xù))礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評審意見
- 七年級地理上冊 6.2 聚落的發(fā)展與保護教學實錄 晉教版
- 大學生創(chuàng)新創(chuàng)業(yè)基礎教程(各類院校創(chuàng)新創(chuàng)業(yè)課程)全套教學課件
- 2024年5月泉州市高三語文高考三模質(zhì)檢試卷附答案解析
- 建設工程安全生產(chǎn)管理模擬練習題及答案
- 2024年刑法知識考試題庫及答案(典優(yōu))
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 追悼會主持詞開場白-追悼會流程主持詞
- 國家基本藥物臨床應用指南最完整版
- 急性髓系白血病小講課
- 大氣冬季滑雪旅游宣傳
- 2016-2023年株洲師范高等??茖W校高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 項目成本管控要素清單
評論
0/150
提交評論