



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)用標(biāo)準(zhǔn)文案軟件設(shè)計(jì)規(guī)范制定:審核:批準(zhǔn):文件編號(hào) 生效日期 版本號(hào)精彩文檔實(shí)用標(biāo)準(zhǔn)文案分發(fā)部門修訂履歷序號(hào) 版本 修訂內(nèi)容 修訂人 修訂日期會(huì)簽與文件發(fā)放:會(huì)簽部門 會(huì)簽人 會(huì)簽日期 簽收部門 簽收人 簽收日期精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心目 錄第一章、項(xiàng)目模塊劃分 17一、模塊劃分 17二、模塊命名 17第二章、文件格式 17一、c文件格式說明: 171、文件創(chuàng)建及修改說明區(qū) 172、頭文件引用區(qū) 183、全局變量定義區(qū) 184、驅(qū)動(dòng)函數(shù)區(qū)5、應(yīng)用函數(shù)區(qū)
.......................................................................................................................18.......................................................................................................................196、文件結(jié)束說明 19二、h文件格式說明 191、文件創(chuàng)建及修改說明區(qū) 192、防重調(diào)用定義 203、頭文件引用 204、控制接口定義區(qū) 205、常量定義區(qū) 216、宏調(diào)用定義區(qū) 217、類型定義區(qū) 218、外部引用變量區(qū)9、外部引用函數(shù)區(qū)10、操作流程說明區(qū)
...............................................................................................................22...............................................................................................................22............................................................................................................2211、文件結(jié)束說明 22精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心第三章、命名規(guī)則 23一、函數(shù)命名規(guī)則 23二、變量命名規(guī)則 23三、宏命名規(guī)則 24四、文件命名規(guī)則 24五、新定義變量類型命名規(guī)則 25六、命名注意事項(xiàng): 251、標(biāo)識(shí)符命名基本原則 252、命名中若使用特殊約定或縮寫,則要有注釋說明3、局部循環(huán)變量也必須按照變量命名規(guī)則來定義
..................................................25......................................................254、不要用數(shù)字或較奇怪的字符來定義標(biāo)識(shí)符 255、用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等 266、避免使用以下劃線開始和結(jié)尾的定義 267、程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符 268、標(biāo)識(shí)符縮寫 269、函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能 2610、避免使用無意義或含義不清的動(dòng)詞為函數(shù)命名 26第四章、代碼書寫規(guī)范 26一、基本原則 26二、排版 271、縮進(jìn)風(fēng)格 272、不要使用【TAB】鍵 273、空行 274、語句長度要小于 80個(gè)字符 285、長語句換行 286、長表達(dá)式換行 28精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心7、若函數(shù)的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐?298、一行只寫一條語句 299、括號(hào){} 2910、語句縮進(jìn)要求 3011、分界符 3112、空格 32三、注釋 331、注釋量 332、函數(shù)頭部注釋 333、代碼與注釋同時(shí)修改 344、注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性 345、避免在注釋中使用縮寫,特別是非常用縮寫 346、注釋書寫位置 347、變量、常量命名不能充分自注釋的,必須加以注釋8、數(shù)據(jù)結(jié)構(gòu)命名不能充分自注釋的,必須加以注釋
.............................................34..................................................359、全局變量注釋 3510、注釋要與說描述的內(nèi)容進(jìn)行同樣的縮排 3511、將注釋與其上面的代碼用空行隔開 3612、連續(xù)case語句處理時(shí),必須編寫注釋 3713、代碼或表達(dá)式的中間禁止插入注釋14、通過正確命名使代碼成為自注釋的
..........................................................................39..........................................................................3915、在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息16、在程序塊的結(jié)束行右方加注釋標(biāo)記,以表明某程序塊的結(jié)束
.....................39..........................3917、注釋格式 4018、采用中文注釋 4019、使用 #if0和#endif注釋代碼塊 40精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心20、注釋不能嵌套 41四、代碼可讀性 411、使用小括號(hào)明確表達(dá)式的操作順序 412、用有意義的枚舉和宏替代數(shù)字 413、源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰 424、用多行簡單語句替代復(fù)雜語句 42五、變量,結(jié)構(gòu) 431、公共變量 431.1、去掉沒必要的公共變量 431.2、仔細(xì)定義并明確公共變量的含義、作用、取值范圍及公共變量間的關(guān)系 431.3、明確公共變量與操作此公共變量的函數(shù)或過程的關(guān)系 431.4、要謹(jǐn)慎向公共變量傳遞數(shù)據(jù) 441.5、防止局部變量與公共變量同名。 441.6、公共變量僅由模塊或函數(shù)創(chuàng)建和修改,其余模塊和函數(shù)只能訪問 442、局部變量 442.1、嚴(yán)禁使用未經(jīng)初始化的變量作為右值 442.2、不使用與硬件或軟件環(huán)境關(guān)系密切的變量 442.3、變量聲明時(shí),同一類型,不同意義的多個(gè)變量,要分行,便于區(qū)分 442.4、對(duì)只設(shè)置一次的變量,宜使用 “const限定”詞進(jìn)行聲明 442.5、避免在函數(shù)中使用 static局部變量 443、數(shù)組 453.1、數(shù)組大小及初始值要明確定義 453.2、數(shù)組、結(jié)構(gòu)和聯(lián)合的初始化列表應(yīng)顯式描述 454、結(jié)構(gòu)、聯(lián)合 454.1、結(jié)構(gòu)的功能要單一,是針對(duì)一種事務(wù)的抽象4.2、不要設(shè)計(jì)面面俱到、非常靈活的數(shù)據(jù)結(jié)構(gòu)
.......................................................45...........................................................46精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心4.3、不同結(jié)構(gòu)間的關(guān)系不要過于復(fù)雜 464.4、結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中 474.5、結(jié)構(gòu)體中元素的布局 484.6、結(jié)構(gòu)體設(shè)計(jì)要考慮兼容性 494.7、跨平臺(tái)數(shù)據(jù)結(jié)構(gòu),要考慮字節(jié)順序及對(duì)齊問題 494.8、struct或union類型中至少應(yīng)有一個(gè)成員 504.9、struct或union類型的成員類型 505、枚舉 505.1、枚舉元素的初始化應(yīng)完整 506、自定義數(shù)據(jù)類型 516.1、合理地設(shè)計(jì)數(shù)據(jù)并使用自定義數(shù)據(jù)類型 516.2、自定義數(shù)據(jù)類型命名要恰當(dāng) 517、類型轉(zhuǎn)換 517.1、謹(jǐn)慎使用數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換 517.2、了解編譯系統(tǒng)默認(rèn)的數(shù)據(jù)類型轉(zhuǎn)換 517.3、應(yīng)禁止 signed類型與unsigned 類型之間的隱式轉(zhuǎn)化 527.4、應(yīng)禁止 int類型與 float類型的隱式轉(zhuǎn)化 528、指針 528.1、不應(yīng)對(duì)指針變量使用強(qiáng)制類型轉(zhuǎn)換賦值 528.2、不應(yīng)把自動(dòng)類型的局部變量的地址賦值給外部指針 528.3、指針的指針不應(yīng)超過兩級(jí) 528.4、指向不同數(shù)據(jù)類型的指針之間不應(yīng)相互轉(zhuǎn)換 528.5、指針轉(zhuǎn)換過程中不應(yīng)丟失指針的 const、volatile屬性 528.6、只有指向數(shù)組的指針才允許進(jìn)行算術(shù)運(yùn)算8.7、只有指向同一數(shù)組的兩個(gè)指針才允許相減
...........................................................52...........................................................538.8、只有指向同一數(shù)組的兩個(gè)指針才允許用 >、>=、<和<=等關(guān)系運(yùn)算符進(jìn)行比較 53精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心8.9、指針的索引值不應(yīng)為負(fù) 548.10、不應(yīng)對(duì)指針值可能為 NULL的指針進(jìn)行算術(shù)運(yùn)算 548.11、調(diào)用返回類型為指針的函數(shù)后,應(yīng)進(jìn)行是否為空的判斷8.12、局部變量的地址不應(yīng)在本對(duì)象消亡后傳給另外一個(gè)對(duì)象
...............................54...............................548.13、一個(gè)未知大小的對(duì)象的指針不應(yīng)成為加法或者減法操作的左操作數(shù) 55六、函數(shù) 551、函數(shù)編寫原則 551.1、明確函數(shù)功能,精確(而不是近似)地實(shí)現(xiàn)函數(shù)設(shè)計(jì) 551.2、函數(shù)的規(guī)模盡量限制在 200行以內(nèi) 551.3、一個(gè)函數(shù)僅完成一件功能 551.4、為簡單功能編寫函數(shù) 551.5、不要設(shè)計(jì)多用途面面俱到的函數(shù) 561.6、函數(shù)功能具有可預(yù)測(cè)性 561.7、函數(shù)功能具有獨(dú)立性 561.8、防止函數(shù)出現(xiàn)隨機(jī)內(nèi)聚 571.9、功能不明確的較小函數(shù),可以不必存在 581.10、設(shè)計(jì)高扇入、合理扇出(小于 7)的函數(shù) 581.11、減少函數(shù)本身或函數(shù)間的遞歸調(diào)用 591.12、降低函數(shù)間的耦合度 592、函數(shù)參數(shù) 592.1、明確接口函數(shù)參數(shù)的合法性檢查者 592.2、防止將函數(shù)的參數(shù)作為工作變量 592.3、避免設(shè)計(jì)多參數(shù)函數(shù),不使用的參數(shù)從接口中去掉 602.4、非調(diào)度函數(shù)應(yīng)減少或防止控制參數(shù),盡量只使用數(shù)據(jù)參數(shù) 602.5、檢查函數(shù)所有參數(shù)輸入的有效性 612.6、檢查函數(shù)所有非參數(shù)輸入的有效性,如數(shù)據(jù)文件、公共變量等 61精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心2.7、調(diào)用函數(shù)時(shí)參數(shù)類型要一致 622.8、避免使用BOOL參數(shù) 622.9、在函數(shù)參數(shù)中不應(yīng)使用 static存儲(chǔ)類標(biāo)識(shí)符 622.10、函數(shù)參數(shù)數(shù)量 622.11、宜避免函數(shù)參數(shù)在調(diào)用中未被使用 623、函數(shù)返回 623.1、對(duì)所調(diào)用函數(shù)的錯(cuò)誤返回碼要仔細(xì)、全面地處理 623.2、函數(shù)的返回值要清楚、明了,讓使用者不容易忽視錯(cuò)誤情況 623.3、函數(shù)返回值要與賦值變量類型一致 623.4、對(duì)于提供了返回值的函數(shù),在引用時(shí)最好使用其返回值 623.5、函數(shù)只有一個(gè)出口 624、可重入函數(shù) 624.1、可重入函數(shù)使用局部變量4.2、可重入函數(shù)使用全局變量
..........................................................................................62..........................................................................................635、函數(shù)模塊劃分 645.1、仔細(xì)分析模塊的功能,進(jìn)行函數(shù)的劃分和組織 645.2、如果多段代碼重復(fù)做同一件事情,那么在函數(shù)的劃分上可能存在問題 645.3、函數(shù)內(nèi)部的代碼結(jié)構(gòu)順序 646、循環(huán)語句 656.1、循環(huán)控制變量的類型應(yīng)為整型 656.2、循環(huán)控制變量應(yīng)為局部變量 656.3、for循環(huán)控制語句中的 3個(gè)表達(dá)式只應(yīng)和循環(huán)控制相關(guān) 656.4、for循環(huán)不宜只執(zhí)行一次 667、判斷語句 667.1、不要輕易用條件分支去替換邏輯表達(dá)式 667.2、switch語句中不應(yīng)只包含 default語句 66精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心7.3、所有非空的switchcase子句都應(yīng)以break語句結(jié)束 667.4、switch控制表達(dá)式不應(yīng)是一個(gè)常量或邏輯表達(dá)式 667.5、每一個(gè)switch語句都應(yīng)至少有一個(gè) case子句 667.6、case表達(dá)式的類型應(yīng)與 switch控制表達(dá)式的類型一致 667.7、case表達(dá)式的大小不應(yīng)超過 switch控制表達(dá)式的大小 668、賦值語句 668.1、盡量不使用條件賦值語句 669、其他注意事項(xiàng) 669.1、避免函數(shù)中不必要語句,防止程序中的垃圾代碼 669.2、在多任務(wù)操作系統(tǒng)的環(huán)境下編程,更要注意函數(shù)可重入性的構(gòu)造 679.3、將常用較長變量用宏替代 67七、預(yù)處理 671、宏 671.1、用宏定義表達(dá)式時(shí),要使用完備的括號(hào)1.2、將宏所定義的多條表達(dá)式放在大括號(hào)中
...............................................................67...............................................................671.3、使用宏時(shí),不允許參數(shù)發(fā)生變化.............................................................................681.4、函數(shù)類宏調(diào)用時(shí)參數(shù)要完整.....................................................................................682、條件編譯............................................................................................................................692.1、預(yù)處理語句“#if”和“#endif”不應(yīng)分散在不同的文件之中........................692.2、被包含文件中的“#else”、“#elseif”、“#endif不”應(yīng)與父文件中的“#if”匹配....................................................................................................................................................692.3、“#if表”達(dá)式中使用的宏應(yīng)該已經(jīng)被定義,并且“#if表”達(dá)式只能包含整型常量692.4、宏如果需要被重定義,應(yīng)該先用“#undef解”除前面的定義............................69八、中斷..................................................................................................................................691、中斷服務(wù)程序不應(yīng)有返回值.........................................................................................692、中斷服務(wù)程序中不應(yīng)使用printf()函數(shù)......................................................................69精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司 文件版本 A1生效日期 發(fā)行類別 ■新增 □修訂軟件設(shè)計(jì)規(guī)范 發(fā)行部門3、對(duì)于中斷中使用到的非局部變量,在中斷處理函數(shù)中應(yīng)對(duì)其進(jìn)行入棧保護(hù)
研發(fā)中心..694、調(diào)用中斷處理程序中的變量要進(jìn)行開關(guān)中斷處理 695、對(duì)于開關(guān)中斷,要注意成對(duì)匹配 696、中斷服務(wù)程序代碼要簡單化 69九、程序可測(cè)性 701、原則 701.1、統(tǒng)一的調(diào)測(cè)開關(guān)及打印函數(shù) 701.2、統(tǒng)一的打印信息串格式 701.3、正式軟件產(chǎn)品中應(yīng)把斷言及其它調(diào)測(cè)代碼去掉(即把有關(guān)的調(diào)測(cè)開關(guān)關(guān)掉) 701.4、用調(diào)測(cè)開關(guān)切換軟件的 DEBUG版和正式版 701.5、軟件DEBUG版和發(fā)行版在實(shí)現(xiàn)功能上具有一致性 701.6、構(gòu)造測(cè)試環(huán)境和測(cè)試用例 701.7、預(yù)先設(shè)計(jì)程序調(diào)測(cè)的方法和手段及各種調(diào)測(cè)開關(guān) 701.8、調(diào)測(cè)開關(guān)應(yīng)分為不同級(jí)別和類型 702、斷言 712.1、使用斷言來發(fā)現(xiàn)軟件問題,提高代碼可測(cè)性 712.2、用斷言來檢查程序正常運(yùn)行時(shí)不應(yīng)發(fā)生但在調(diào)測(cè)時(shí)有可能發(fā)生的非法情況 722.3、不能用斷言來檢查最終產(chǎn)品肯定會(huì)出現(xiàn)且必須處理的錯(cuò)誤情況 722.4、對(duì)較復(fù)雜的斷言加上明確的注釋 722.5、用斷言確認(rèn)函數(shù)的參數(shù) 722.6、用斷言保證沒有定義的特性或功能不被使用 722.7、用斷言對(duì)程序開發(fā)環(huán)境( OS/Compiler/Hardware)的假設(shè)進(jìn)行檢查 732.8、編寫防錯(cuò)程序,然后在處理錯(cuò)誤之后可用斷言宣布發(fā)生錯(cuò)誤 73十、程序效率 741、原則 741.1、編程時(shí)要經(jīng)常注意代碼的效率 74精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心1.2、提高代碼效率的前提 741.3、局部效率應(yīng)為全局效率服務(wù) 751.4、合理劃分模塊函數(shù) 751.5、不應(yīng)花過多的時(shí)間拼命地提高調(diào)用不很頻繁的函數(shù)代碼效率 751.6、不要一味追求緊湊的代碼1.7、不應(yīng)存在執(zhí)行不到的代碼
..........................................................................................75..........................................................................................751.8、去掉沒必要的全局變量 752、方法 752.1、解決軟件空間效率 1 752.2、解決軟件空間效率 2 762.3、循環(huán)體內(nèi)工作量最小化 762.4、仔細(xì)分析有關(guān)算法,并進(jìn)行優(yōu)化 772.5、仔細(xì)考查、分析系統(tǒng)及模塊處理輸入(如事務(wù)、消息等)的方式,并加以改進(jìn) 772.6、直接用匯編編寫調(diào)用頻繁或性能要求極高的函數(shù) 772.7、在多重循環(huán)中,應(yīng)將最忙的循環(huán)放在最內(nèi)層 772.8、盡量減少循環(huán)嵌套層次 782.9、盡量不在循環(huán)體內(nèi)放置判斷語句 782.10、盡量用乘法或其它方法代替除法,特別是浮點(diǎn)運(yùn)算中的除法 792.11、應(yīng)注意switch-case語句的使用 80十一、程序質(zhì)量 801、原則 801.1、代碼質(zhì)量保證優(yōu)先原則 801.2、合理劃分子模塊,提高可移植性和可重用性 801.3、提供良好的接口界面1.4、系統(tǒng)具有一定容錯(cuò)能力
..................................................................................................80..............................................................................................802、方法 80精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心2.1、認(rèn)真處理程序所能遇到的各種出錯(cuò)情況...............................................................802.2、系統(tǒng)運(yùn)行之初,要初始化有關(guān)變量及運(yùn)行環(huán)境,防止未經(jīng)初始化的變量被引用802.3、系統(tǒng)運(yùn)行之初,要對(duì)加載到系統(tǒng)中的數(shù)據(jù)進(jìn)行一致性檢查.............................812.4、嚴(yán)禁隨意更改其它模塊或系統(tǒng)的有關(guān)設(shè)置和配置..............................................812.5、不能隨意改變與其它模塊的接口.............................................................................812.6、防止內(nèi)存操作越界.......................................................................................................812.7、編程時(shí),要防止差1錯(cuò)誤.........................................................................................822.8、要時(shí)刻注意易混淆的操作符.....................................................................................822.9、條件判斷語句必須處理所有情況.............................................................................822.10、不要用goto語句.......................................................................................................822.11、盡量都采用標(biāo)準(zhǔn)語句和標(biāo)準(zhǔn)庫函數(shù)......................................................................822.12、避免使用嵌入式匯編................................................................................................822.13、精心構(gòu)造算法,并對(duì)其性能、效率進(jìn)行測(cè)試....................................................822.14、對(duì)較關(guān)鍵的算法最好使用其它算法來確認(rèn).........................................................832.15、時(shí)刻注意表達(dá)式是否會(huì)上溢、下溢......................................................................832.16、使用變量時(shí)要注意其邊界值的情況......................................................................832.17、注意程序代碼是否超過系統(tǒng)有關(guān)限制.................................................................832.18、循環(huán)、分支層次不要超過五層...............................................................................842.19、不要比較浮點(diǎn)數(shù)的相等............................................................................................842.20、關(guān)注共用體的存儲(chǔ)、對(duì)齊模式...............................................................................842.21、頭文件中不應(yīng)有對(duì)象或函數(shù)的定義......................................................................842.22、不應(yīng)單獨(dú)使用小寫字母“l(fā)”或大寫字母“O”作為變量名...........................842.23、函數(shù)聲明時(shí)參數(shù)不應(yīng)只有類型名沒有標(biāo)識(shí)符....................................................842.24、不應(yīng)對(duì)有符號(hào)數(shù)進(jìn)行位運(yùn)算...................................................................................842.25、無格式的字符型不應(yīng)與負(fù)數(shù)常量和零比較.........................................................842.26、無符號(hào)值不應(yīng)與負(fù)數(shù)常量比較...............................................................................85精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司 文件版本 A1生效日期 發(fā)行類別 ■新增 □修訂軟件設(shè)計(jì)規(guī)范 發(fā)行部門 研發(fā)中心2.27、對(duì)變量進(jìn)行移位操作應(yīng)保證不會(huì)產(chǎn)生溢出和數(shù)據(jù)截短 852.28、不應(yīng)在布爾表達(dá)式中使用賦值操作符 852.29、不應(yīng)對(duì)布爾表達(dá)式進(jìn)行算術(shù)或者位運(yùn)算2.30、表達(dá)式的值在任何求值順序下應(yīng)保持一致
.............................................................85.........................................................852.31、應(yīng)避免除數(shù)可能為 0的情況出現(xiàn)..........................................................................852.32、賦值運(yùn)算符的左操作數(shù)不應(yīng)進(jìn)行轉(zhuǎn)換操作,并且應(yīng)該是一個(gè)可更改的對(duì)象 852.33、sizeof操作符不應(yīng)用在有單邊作用的表達(dá)式上 852.34、留心具體語言及編譯器處理不同數(shù)據(jù)類型的原則及有關(guān)細(xì)節(jié) 85十二、代碼代碼編輯、編譯、審查 861、打開編譯器的所有告警開關(guān)對(duì)程序進(jìn)行編譯 862、在產(chǎn)品軟件(項(xiàng)目組)中,要統(tǒng)一編譯開關(guān)選項(xiàng) 863、通過代碼走讀及審查方式對(duì)代碼進(jìn)行檢查 864、測(cè)試部測(cè)試產(chǎn)品之前,應(yīng)對(duì)代碼進(jìn)行抽查及評(píng)審 865、養(yǎng)成隨時(shí)保存編寫代碼的習(xí)慣 866、同產(chǎn)品軟件(項(xiàng)目組)內(nèi),最好使用相同的編輯器,并使用相同的設(shè)置選項(xiàng) 867、要小心地使用編輯器提供的塊拷貝功能編程8、合理地設(shè)計(jì)軟件系統(tǒng)目錄,方便開發(fā)人員使用
..........................................................86......................................................86附錄A 常用數(shù)據(jù)類型及簡寫 87附錄B常用單詞及縮寫 88附錄C常見反義詞組附錄D常見命名規(guī)則
...........................................................................................................90...........................................................................................................92一、匈牙利命名法 92二、駱駝(Camel)命名法 92三、帕斯卡(Pascal)命名法 92四、下劃線命名法 92精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心第一章、項(xiàng)目模塊劃分一、模塊劃分將整個(gè)項(xiàng)目按照功能進(jìn)行模塊劃分,各個(gè)模塊相互獨(dú)立,每個(gè)模塊由一系列c文件和h文件組成。簡單功能的模塊采用一個(gè)c文件和h文件接口,復(fù)雜功能的模塊可能需要多個(gè)c文件和h文件。二、模塊命名按照模塊所實(shí)現(xiàn)功能的英文名稱或者簡寫命名,全部采用小寫字母,多于1個(gè)單詞的中間加下劃線。例如:模塊命名說明lcd.c液晶初始化,字符、漢字和圖片顯示lcd.h液晶lcd_fonts.c液晶自定義字庫lcd_fonts.h按鍵key.c按鍵初始化,鍵值列表,取按鍵值key.h指示燈led.c指示燈初始化,閃爍控制led.h數(shù)碼管ledseg.c數(shù)碼管初始化,數(shù)字顯示,特殊字符顯示ledseg.h蜂鳴器beep.c蜂鳴器初始化,鳴叫控制beep.h第二章、文件格式一、c文件格式說明:1、文件創(chuàng)建及修改說明區(qū)精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范主要包含:公司信息:公司名稱、公司網(wǎng)站。創(chuàng)建信息:創(chuàng)建者名稱,創(chuàng)建日期,最初版本號(hào),文檔內(nèi)容描述。修改信息:修改者名稱,修改日期,修改后版本號(hào),修改內(nèi)容描述??蓞⒖寄K《template.c》說明:與硬件相關(guān)的文件可以在此增加說明,如芯片型號(hào)等。2、頭文件引用區(qū)主要包含:系統(tǒng)頭文件引用:文件名包含在尖括號(hào)中。自定義頭文件引用:文件名包含著雙引號(hào)中??蓞⒖寄K《template.c》3、全局變量定義區(qū)主要包含:全局變量定義區(qū)說明注釋行:全局變量定義:要賦初值。全局變量注釋:可參考模塊《template.c》。4、驅(qū)動(dòng)函數(shù)區(qū)
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范主要包含:驅(qū)動(dòng)函數(shù)區(qū)說明注釋行:函數(shù)說明:包含函數(shù)說明,參數(shù)說明,返回值說明。函數(shù)體:可參考模塊《template.c》5、應(yīng)用函數(shù)區(qū)主要包含:應(yīng)用函數(shù)區(qū)說明注釋行:函數(shù)說明:包含函數(shù)功能說明,參數(shù)說明,返回值說明。函數(shù)體:可參考模塊《template.c》6、文件結(jié)束說明主要包含:文件結(jié)束說明: EndOfFile可參考模塊《template.c》二、h文件格式說明1、文件創(chuàng)建及修改說明區(qū)
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范主要包含:公司信息:公司名稱、公司網(wǎng)站。創(chuàng)建信息:創(chuàng)建者名稱,創(chuàng)建日期,最初版本號(hào),文檔內(nèi)容描述。修改信息:修改者名稱,修改日期,修改后版本號(hào),修改內(nèi)容描述??蓞⒖寄K《template.h》2、防重調(diào)用定義命名規(guī)則:下劃線 +文件名大寫+下劃線+文件類型 H+下劃線可參考模塊《template.h》3、頭文件引用主要包含:系統(tǒng)頭文件引用:文件名包含在尖括號(hào)中。自定義頭文件引用:文件名包含著雙引號(hào)中。可參考模塊《template.h》4、控制接口定義區(qū)主要包含:控制口線定義區(qū)說明注釋行:
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范接口定義:全部采用大寫字母,單詞間以下劃線分割注釋說明:可參考模塊《template.h》5、常量定義區(qū)主要包含:常量定義區(qū)說明注釋行:常量定義:全部采用大寫字母,單詞間以下劃線分割注釋說明:可參考模塊《template.h》6、宏調(diào)用定義區(qū)主要包含:宏調(diào)用定義區(qū)說明注釋行:宏調(diào)用處理:注釋說明:可參考模塊《template.h》7、類型定義區(qū)主要包含:類型定義區(qū)說明注釋行:類型定義:注釋說明:結(jié)構(gòu)體成員要單獨(dú)說明??蓞⒖寄K《template.h》
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范8、外部引用變量區(qū)主要包含:外部應(yīng)用變量區(qū)說明注釋行:引用變量聲明:以 extern關(guān)鍵字開始注釋說明:可參考模塊《template.h》9、外部引用函數(shù)區(qū)主要包含:外部應(yīng)用函數(shù)區(qū)說明注釋行:函數(shù)注釋說明:包含函數(shù)功能說明,參數(shù)說明,返回值說明引用函數(shù)聲明:以 extern關(guān)鍵字開始可參考模塊《template.h》10、操作流程說明區(qū)主要包含:操作流程說明區(qū)說明注釋行:模塊執(zhí)行流程說明:說明要詳細(xì),執(zhí)行步驟要明確??蓞⒖寄K《template.h》11、文件結(jié)束說明
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心主要包含:文件結(jié)束說明: EndOfFile可參考模塊《 template.h》第三章、命名規(guī)則一、函數(shù)命名規(guī)則格式如下:序號(hào)說明字體選擇備注1模塊名稱大寫必選以最直觀模式給用戶區(qū)分不同的模塊函數(shù),采用模塊英文名稱或者簡寫2下劃線必選間隔符3函數(shù)動(dòng)作首字母大寫必選動(dòng)作英文名稱或者簡寫,最多2個(gè)單詞4函數(shù)對(duì)象首字母大寫可選對(duì)象英文名稱或者簡寫,最多2個(gè)單詞5函數(shù)范圍首字母大寫可選范圍英文名稱或者簡寫,最多2個(gè)單詞例如:LCD_DispWord,表示液晶模塊顯示漢字函數(shù)命名的一個(gè)重要原則是望文知意(其他人看到函數(shù)名就大體知道函數(shù)功能) ,必須考慮命名的準(zhǔn)確性,命名體現(xiàn)函數(shù)的功能,而不要體現(xiàn)函數(shù)的實(shí)現(xiàn)方法。二、變量命名規(guī)則局部變量命名:格式如下:序號(hào) 說明 字體 選擇 備注1 變量類型 簡寫小寫 必選 以最直觀模式給用戶區(qū)分不同的變量類型,精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司 文件版本 A1生效日期軟件設(shè)計(jì)規(guī)范發(fā)行類別■新增□修訂發(fā)行部門研發(fā)中心最多2個(gè)字母長度,具體參考《附錄A常用變量類型及簡寫》2變量修飾首字母大寫可選修飾詞英文名稱或者簡寫,最多2個(gè)單詞3變量名稱首字母大寫必選名稱英文名稱或者簡寫,最多2個(gè)單詞例如:ucharucCurrentValue;表示無符號(hào)類型,當(dāng)前值數(shù)組變量命名時(shí)在局部變量類型前增加前綴字母“ a”。例如:ucharaucSendBuff[10];指針變量命名時(shí)在局部變量類型前增加前綴字母“ p”。例如:uchar*pucReceiveBuff[10];全局變量命名時(shí)在局部變量類型前增加前綴字母“ g”和下劃線。靜態(tài)變量命名時(shí)在局部變量類型前增加前綴字母“ s”和下劃線。三、宏命名規(guī)則格式如下:序號(hào)說明字體選擇備注1模塊名稱大寫必選以最直觀模式給用戶區(qū)分不同的模塊宏,采用模塊英文名稱或者簡寫2下劃線必選間隔符3功能名稱大寫必選功能英文名稱或者簡寫,最多2個(gè)單詞4下劃線可選間隔符5修飾詞大寫可選修飾詞英文名稱或者簡寫,最多2個(gè)單詞例如:#defineTMP_BUFF_MAX256//緩沖區(qū)最大長度四、文件命名規(guī)則格式如下(全部小寫):序號(hào)說明字體選擇備注1模塊名稱小寫必選采用模塊英文名稱或者簡寫2下劃線可選_3分類名稱小寫可選分類英文名稱或者簡寫精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心4頓號(hào)必選.5文件類型小寫必選代碼文件(c),頭文件(h)例如:液晶模塊:lcd_driver.c lcd_driver.h lcd_fonts.c lcd_fonts.h按鍵模塊:key.c key.h五、新定義變量類型命名規(guī)則新定義變量類型對(duì)變量進(jìn)行命名時(shí)可以提出2個(gè)與其他類型不相同的字母前綴來表示,并在文件開始或者新類型定義時(shí)進(jìn)行說明。六、命名注意事項(xiàng):1、標(biāo)識(shí)符命名基本原則標(biāo)識(shí)符的命名要清晰、明了,有明確含義,同時(shí)使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。盡量采用英文命名,不可以用漢語拼音。標(biāo)識(shí)符的長度應(yīng)當(dāng)符合 “min-length&&max- information ”原則。說明:較短的單詞可通過去掉“元音”形成縮寫;較長的單詞可取單詞的頭幾個(gè)字母形成縮寫;一些單詞有大家公認(rèn)的縮寫。參考《附錄 B常用單詞及縮寫》2、命名中若使用特殊約定或縮寫,則要有注釋說明說明:應(yīng)該在源文件的開始之處,對(duì)文件中所使用的縮寫或約定,特別是特殊的縮寫,進(jìn)行必要的注釋說明。3、局部循環(huán)變量也必須按照變量命名規(guī)則來定義說明:變量,尤其是局部變量,如果用單個(gè)字符表示,很容易敲錯(cuò)(如 i寫成j),而編譯時(shí)又檢查不出來,有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。4、不要用數(shù)字或較奇怪的字符來定義標(biāo)識(shí)符示例:如下命名,使人產(chǎn)生疑惑。#defineEXAMPLE_0_TEST#defineEXAMPLE_1_TESTvoidTMP_SetSls00(ucharucSls);應(yīng)改為有意義的單詞命名#defineEXAMPLE_UNIT_TEST精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心#defineEXAMPLE_ASSERT_TESTvoidTMP_SetUdtMsgSls(ucharucSls);5、用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等說明:可參考《附錄 C常見反義詞組》下面是一些在軟件中常用的反義詞組。示例:uintuiMinSum;uintuiMaxSum;uintTMP_AddUser(uchar*pucUserName);uintTMP_DeleteUser(uchar*pucUserName);6、避免使用以下劃線開始和結(jié)尾的定義除了編譯開關(guān)/頭文件等特殊應(yīng)用,應(yīng)避免使用 _EXAMPLE_TEST_ 之類以下劃線開始和結(jié)尾的定義7、程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符例如:uint uix, uiX; // 變量x與X 容易混淆voidTMP_foo(uintuiX); // 函數(shù)foo 與FOO容易混淆voidTMP_FOO(floatfX);8、標(biāo)識(shí)符縮寫命名時(shí)盡量不使用單詞縮寫,如果單詞太長必須縮寫,應(yīng)該省略其中的元音字母,以便望文知意,如packet_header縮寫為pkt_hdr,而不要縮寫為pack_h。常用單詞縮寫見《附錄 B常用單詞及縮寫》9、函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能10、避免使用無意義或含義不清的動(dòng)詞為函數(shù)命名說明:避免用含義不清的動(dòng)詞如 process 、handle 等為函數(shù)命名,因?yàn)檫@些動(dòng)詞并沒有說明要具體做什么。第四章、代碼書寫規(guī)范一、基本原則制定規(guī)范的基本目的就是加強(qiáng)代碼的可維護(hù)性,也就是說代碼必須易于閱讀,易于理解,易于測(cè)試,易于移植。所有的代碼必須采用 ANSIC,標(biāo)準(zhǔn)函數(shù)原型必須采用 ANSIC 標(biāo)準(zhǔn)。保持代碼語句和結(jié)構(gòu)簡單清晰,避精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心免使用復(fù)雜語句。二、排版1、縮進(jìn)風(fēng)格程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為 4個(gè)。預(yù)處理語句、全局?jǐn)?shù)據(jù)、函數(shù)原型、標(biāo)題、附加說明、函數(shù)說明、標(biāo)號(hào)等均頂格書寫。語句塊的 “{”“配}對(duì)”對(duì)齊,并與其前一行對(duì)齊。2、不要使用【TAB】鍵【TAB】鍵在不同編輯器和打印機(jī)上因所設(shè)置空格數(shù)目不同而造成程序布局不整齊, 從而導(dǎo)致代碼縮排混亂??梢圆捎每崭矜I來替代, 4個(gè)空格代替一個(gè)【 TAB】鍵。如果采用 SourceInsight軟件,可以設(shè)置按【 TAB】鍵后自動(dòng)用 4個(gè)空格鍵替代。3、空行相對(duì)獨(dú)立的程序塊之間、變量說明之后必須加空行。程序文件結(jié)構(gòu)各部分之間空兩行,若不必要也可只空一行,各函數(shù)實(shí)現(xiàn)之間一般空兩行示例:如下例子不符合規(guī)范。if((ucCount==1)&&(ucRetCode==1)){if(ucStatus=='1'){*pucErrCode=0;returnEPRONTCENTER;}}if((ucCount==1)&&(ucRetCode==0)){*pucErrCode=EPRONTCENTER;returnEPRONTCENTER;}應(yīng)如下書寫:if((ucCount==1)&&(ucRetCode==1)){精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心if(ucStatus=='1'){*pucErrCode=0;returnEPRONTCENTER;}}if((ucCount==1)&&(ucRetCode==0)){*pucErrCode=EPRONTCENTER;returnEPRONTCENTER;}4、語句長度要小于 80個(gè)字符一行語句以小于80字符為宜,不要寫得過長。過多的代碼會(huì)導(dǎo)致顯示器顯示不足,從而降低代碼閱讀速度,代碼打印時(shí)也會(huì)導(dǎo)致打印不足5、長語句換行較長的語句(>80字符)要分成多行書寫,長表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行, 操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。示例:stPermCountMsg.ucHead.ucLen=TMP_TO_STAT_PERM_COUNT_LEN+TMP_STAT_SIZE_PER_FRAM*sizeof(ulong);aucTaskTable[ucFrameId*TMP_STAT_TASK_CHECK_NUMBER+ucIndex]=astAtPoi[ucIndex].ucStatus;6、長表達(dá)式換行循環(huán)、判斷等語句中若有較長的表達(dá)式或語句,則要進(jìn)行適應(yīng)的劃分,長表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首。劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。示例:if((ucTaskNo<TMP_MAX_TASK_NUMBER)&&(TMP_StatItemValid(ucStatItem)))精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范{...//programcode}for(i=0,j=0;(i<astBufferKeyword[ucWordIndex].ucWordLength)&&(j<stNewKeyword.ucWordLength);i++,j++){...//programcode}
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心for(i=0,j=0;(i<usFirstWordLength)&&(j<ucSecondWordLength);i++,j++){...//programcode}7、若函數(shù)的參數(shù)較長,則要進(jìn)行適當(dāng)?shù)膭澐?、一行只寫一條語句不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句示例:如下例子不符合規(guī)范。stRect.ucLength=0;stRect.ucWidth=0;應(yīng)如下書寫stRect.ucLength=0;stRect.ucWidth=0;9、括號(hào){}if 、for 、do、while 、case、switch 、default 等語句自占一行,且 if 、for 、do、while 等語句的執(zhí)行語句部分無論多少都要加括號(hào) {}。左大括號(hào)“{”后和右大括號(hào)“}”前不可出現(xiàn)代碼,并且與引用他的語句左對(duì)齊。精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心示例:如下例子不符合規(guī)范。if(pUserCR==NULL)return;應(yīng)如下書寫:if(pUserCR==NULL){return;}10、語句縮進(jìn)要求函數(shù)的開始、結(jié)構(gòu)的定義及循環(huán)、 判斷等語句中的代碼都要采用縮進(jìn)風(fēng)格, case語句下的情況處理語句也要遵從語句縮進(jìn)要求。預(yù)處理指令不需要縮進(jìn),總是從行首開始。即使預(yù)處理指令位于縮進(jìn)代碼塊中,指令也應(yīng)從行首開始示例:良好風(fēng)格:預(yù)處理指令均從行首開始if(lopsided_score){#ifDISASTER_PENDING //Correct--StartsatbeginningoflineDropEverything();#ifNOTIFYNotifyClient();#endif#endifBackToNormal();}不良風(fēng)格:縮進(jìn)的預(yù)處理指令if(lopsided_score){#ifDISASTER_PENDING//Wrong!The"#if"shouldbeatbeginning//ofline精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心DropEverything();#endif //Wrong!Donotindent"#endif"BackToNormal();}11、分界符程序塊的分界符(如 C/C++語言的大括號(hào)‘ {’和‘}’)應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對(duì)齊。在函數(shù)體的開始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及 if 、for 、do、while 、switch 、case 語句中的程序都要采用如上的縮進(jìn)方式。示例:如下例子不符合規(guī)范。for(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}應(yīng)如下書寫。for(...){...//programcode}if(...)精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心{...//programcode}voidexample_fun(void){...//programcode}12、空格在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對(duì)等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對(duì)等操作時(shí),如果是關(guān)系密切的操作符(一元操作符,成員操作符,數(shù)組下標(biāo))后不應(yīng)加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對(duì)的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格, 如果語句已足夠清晰則括號(hào)內(nèi)側(cè) (即左括號(hào)后面和右括號(hào)前面 )不需要加空格,多重括號(hào)間不必加空格,因?yàn)樵?C/C++語言中括號(hào)已經(jīng)是最清晰的標(biāo)志了。在長語句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時(shí)不要連續(xù)留兩個(gè)以上空格。(1)、關(guān)鍵字之后要留空格,以突出關(guān)鍵字。(2)、函數(shù)名之后不要留空格,緊跟左括號(hào) ‘,(’以與關(guān)鍵字區(qū)別(3)、‘向(’后緊跟,‘、)’‘、,’‘向;’前緊跟,緊跟處不留空格。(4)、‘之,’后要留空格,例如:Function(x,y,z)。、如果‘不;’是一行的結(jié)束符號(hào),其后要留空格例如:for(initialization;condition;update)(6)、賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如 “=”、“+=” “>=、”“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^等”二元操作符的前后應(yīng)當(dāng)加一個(gè)空格。if(current_time>=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2;精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期軟件設(shè)計(jì)規(guī)范發(fā)行類別■新增□修訂發(fā)行部門研發(fā)中心(7)、"!"、"~"、"++"、"--"、"&"(地址運(yùn)算符)等單目操作符前后不加空格。*p='a';//內(nèi)容操作"*"與內(nèi)容之間flag=!isEmpty;//非操作"!"與內(nèi)容之間p=&mem;//地址操作"&"與內(nèi)容之間i++;//"++","--"與內(nèi)容之間(8)、”[]”、"->"、"."前后不加空格。p->id=pid;//"->"指針前后不加空格(9)、指針定義符號(hào) *的前面加空格。char*get_string(){char*str;}(10)、對(duì)于表達(dá)式比較長的 for語句和if語句,為了緊湊起見可以適當(dāng)?shù)厝サ粢恍┛崭窭纾篺or(i=0;i<10;i++) 和if((a<=b)&&(c<=d))三、注釋1、注釋量一般情況下,源程序有效注釋量必須在 20%以上。說明:注釋的原則是有助于對(duì)程序的閱讀理解,注釋不宜太多也不能太少,注釋語言必須準(zhǔn)確、易懂、簡潔。2、函數(shù)頭部注釋每個(gè)函數(shù)頭部都應(yīng)該進(jìn)行注釋,包括函數(shù)實(shí)現(xiàn)的功能,參數(shù)說明,返回值等。函數(shù)的頭部注釋要達(dá)到調(diào)用無需瀏覽函數(shù),從注釋區(qū)就能夠了解該函數(shù)的全部信息。函數(shù)功能:該函數(shù)實(shí)現(xiàn)的具體功能,具有依賴關(guān)系的函數(shù)間在此進(jìn)行說明。參數(shù):如果參數(shù)值為已知,可以在此詳細(xì)列表說明。如果函數(shù)有調(diào)用全局變量,也要在此進(jìn)行詳細(xì)說明。精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心返回:函數(shù)返回值,對(duì)不同的返回值要進(jìn)行詳細(xì)說明。3、代碼與注釋同時(shí)修改邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。4、注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性說明:錯(cuò)誤的注釋不但無益反而有害。5、避免在注釋中使用縮寫,特別是非常用縮寫說明:在使用縮寫時(shí)或之前,應(yīng)對(duì)縮寫進(jìn)行必要的說明。6、注釋書寫位置注釋應(yīng)與其描述的代碼相近,對(duì)代碼的注釋應(yīng)放在其上方或右方(對(duì)單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。示例:如下例子不符合規(guī)范。例1://getreplicatesubsystemindexandnetindicatorucRepssnInd= aucSsnData[ ucIndex]. ucRepssnI ndex;ucRepssnNi=aucS snData[ ucIndex]. ucNi;例2:ucRepssnInd= aucSsnData[ ucIndex]. ucRepssnI ndex;ucRepssnNi=aucS snData[ ucIndex]. ucNi;//getreplicatesubsystemindexandnetindicator應(yīng)如下書寫//getreplicatesubsystemindexandnetindicatorucRepssnInd=aucSsnata[ucIndex].ucRepssnIndex;DucRepssnNi=aucSsnData[ucIndex].ucNi;7、變量、常量命名不能充分自注釋的,必須加以注釋精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心對(duì)于所有有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時(shí)都必加注釋,說明其物理含義。變量、常量、宏的注釋應(yīng)放在其上方相鄰位置或右方。示例://activestatistictasknumber#defineMAX_ACT_TASK_NUMBER1000#defineMAX_ACT_TASK_NUMBER1000//activestatistictasknumber8、數(shù)據(jù)結(jié)構(gòu)命名不能充分自注釋的,必須加以注釋數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)域的注釋放在此域的右方。示例:可按如下形式說明枚舉 /數(shù)據(jù)/聯(lián)合結(jié)構(gòu)。//sccpinterfacewithsccpuserprimitivemessagenameenumSCCP_USER_PRIMITIVE{N_UNITDATA_IND,//sccpnotifysccpuserunitdatacomeN_NOTICE_IND, //sccpnotifyusertheNo.7networkcannot//transmissionthismessageN_UNITDATA_REQ,//sccpuser'sunitdatatransmissionrequest};9、全局變量注釋全局變量要有較詳細(xì)的注釋,包括對(duì)其功能、取值范圍、以及存取時(shí)注意事項(xiàng)等的說明。10、注釋要與說描述的內(nèi)容進(jìn)行同樣的縮排說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:如下例子,排版不整齊,閱讀稍感不方便。精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范voidexample_fun(void){//codeonecommentsCodeBlockOnecodetwocommentsCodeBlockTwo}應(yīng)改為如下布局。voidexample_fun(void){//codeonecommentsCodeBlockOne//codetwocommentsCodeBlockTwo}11、將注釋與其上面的代碼用空行隔開示例:如下例子,顯得代碼過于緊湊。//codeonecomments*/programcodeone
文件編號(hào)文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心//codetwocommentsprogramcodetwo應(yīng)如下書寫://codeonecommentsprogramcodeone//codetwocommentsprogramcodetwo12、連續(xù)case語句處理時(shí),必須編寫注釋對(duì)于switch語句下的case語句,如果因?yàn)樘厥馇闆r需要處理完一個(gè) case后進(jìn)入下一個(gè) case處理,必須在該case語句處理完、下一個(gè) case語句前加上明確的注釋。說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏 break語句。示例(注意斜體加粗部分) :caseCMD_UP:ProcessUp();break;caseCMD_DOWN:ProcessDown();break;精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心caseCMD_FWD:ProcessFwd();if(...){...break;}else{ProcessCFW_B(); //nowjumpintocaseCMD_A}caseCMD_A:ProcessA();break;caseCMD_B:ProcessB();break;精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心caseCMD_C:ProcessC();break;caseCMD_D:ProcessD();break;...13、代碼或表達(dá)式的中間禁止插入注釋說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否則容易使代碼可理解性變差。14、通過正確命名使代碼成為自注釋的通過對(duì)函數(shù)或過程、變量、結(jié)構(gòu)等正確的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋15、在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復(fù)注釋信息。示例:如下注釋意義不大。//ifreceive_flagisTRUEif(receive_flag)而如下的注釋則給出了額外有用的信息。//ifmtpreceiveamessagefromlinksif(receive_flag)16、在程序塊的結(jié)束行右方加注釋標(biāo)記,以表明某程序塊的結(jié)束精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司文件版本A1生效日期發(fā)行類別■新增□修訂軟件設(shè)計(jì)規(guī)范發(fā)行部門研發(fā)中心說明:當(dāng)代碼段較長,特別是多重嵌套時(shí),這樣做可以使代碼更清晰,更便于閱讀。示例:參見如下例子。if(...){//programcodewhile(index<MAX_INDEX){//programcode}/*endofwhile(index<MAX_INDEX)*/// 指明該條while 語句結(jié)束}/*endofif(...)*/// 指明是哪條 if 語句結(jié)束17、注釋格式語句、變量定義、宏定義注釋使用“ //”格式語句塊、函數(shù)說明使用“ /* */ ”格式。18、采用中文注釋注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。說明:注釋語言不統(tǒng)一,影響程序易讀性和外觀排版,出于對(duì)維護(hù)人員的考慮,建議使用中文。19、使用#if0和#endif注釋代碼塊使用#if0和#endif注釋代碼塊。例如:來注釋一段較大的代碼#if0#defineDISP_TBL_SIZE5 //Sizeofdisplaybuffertable#defineDISP_MAX_X 80//Max.numberofcharactersinXaxis#defineDISP_MAX_Y 25//Max.numberofcharactersinYaxis精彩文檔實(shí)用標(biāo)準(zhǔn)文案深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件編號(hào)文件版本A1發(fā)行類別■新增□修訂發(fā)行部門研發(fā)中心#defineDISP_MASK 0x5F#endif20、注釋不能嵌套四、代碼可讀性1、使用小括號(hào)明確表達(dá)式的操作順序注意運(yùn)算符的優(yōu)先級(jí),并用括號(hào)明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級(jí) 。說明:防止閱讀程序時(shí)產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級(jí)與設(shè)計(jì)思想不符而導(dǎo)致程序出錯(cuò)。示例:下列語句中的表達(dá)式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) 不會(huì)出錯(cuò),但語句不易理解;a|b<c&d=a| (b<c )&d ,(3) 造成了判斷條件出錯(cuò)。2、用有意義的枚舉和宏替代數(shù)字避免使用不易理解的數(shù)字,用有意義的標(biāo)識(shí)來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的枚舉或宏來代替。示例:如下的程序可讀性差。if(Trunk[index].trunk_state==0){Trunk[index].trunk_state=1;...//programcode}精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范應(yīng)改為如下形式:#defineTRUNK_IDLE0#defineTRUNK_BUSY1if(Trunk[index].trunk_state==TRUNK_IDLE){Trunk[index].trunk_state=TRUNK_BUSY;...//programcode}3、源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰說明:便于程序閱讀和查找。示例:以下代碼布局不太合理。rect.length=10;char_poi=str;rect.width=5;若按如下形式書寫,可能更清晰一些。rect.length=10;rect.width=5;// 矩形的長與寬關(guān)系較密切,放在一起。char_poi=str;4、用多行簡單語句替代復(fù)雜語句不要使用難懂的技巧性很高的語句,除非很有必要時(shí)。說明:高技巧語句不等于高效率的程序,實(shí)際上程序的效率關(guān)鍵在于算法。示例:如下表達(dá)式,考慮不周就可能出問題,也較難理解。stat_poi+++=1;++stat_poi+=1;
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心精彩文檔實(shí)用標(biāo)準(zhǔn)文案文件編號(hào)深圳市德卡科技有限公司生效日期軟件設(shè)計(jì)規(guī)范
文件版本 A1發(fā)行類別 ■新增 □修訂發(fā)行部門 研發(fā)中心應(yīng)分別改為如下。*stat_poi+=1;stat_poi++; // 此二語句功能相當(dāng)于“ *stat_poi+++=1; ”++stat_poi;*stat_poi+=1;// 此二語句功能相當(dāng)于“ *++stat_poi+=1;五、變量,結(jié)構(gòu)1、公共變量1.1、去掉沒必要的公共變量說明:公共變量是增大模塊間耦合的原因之一,故應(yīng)減少?zèng)]必要的公共變量以降低模塊間的耦合度。1.2、仔細(xì)定義并明確公共變量的含義、作用、取值范圍及公共變量間的關(guān)系說明:在對(duì)變量聲明的同時(shí),應(yīng)對(duì)其含義、作用及取值范圍進(jìn)行注釋說明,同時(shí)若有必要還應(yīng)說明與其它變量的關(guān)系。1.3、明確公共變量與操作此公共變量的函數(shù)或過程的關(guān)系明確公共變量與操作此公共變量的函數(shù)或過程的關(guān)系,如訪問、修改及創(chuàng)建等。說明:明確過程操作變量的關(guān)系后,將有利于程序的進(jìn)一步優(yōu)化、單元測(cè)試、系統(tǒng)聯(lián)調(diào)以及代碼維護(hù)等。這種關(guān)系的說明可在注釋或文檔中描述。示例:在源文件中,可按如下注釋形式說明。RELATION System_InitInput_Rec Print_Rec Stat_ScoreStudent Create Modify Access AccessScore Create Modify Access Acc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)電子商務(wù)實(shí)踐操作指南
- 國際貿(mào)易實(shí)務(wù)操作與規(guī)范手冊(cè)
- 安全專項(xiàng)施工方案需要進(jìn)行專家論證的是
- 高效率團(tuán)隊(duì)協(xié)作技巧培訓(xùn)計(jì)劃書
- 農(nóng)業(yè)行業(yè)物聯(lián)網(wǎng)技術(shù)與應(yīng)用方案
- 農(nóng)村金融服務(wù)與合作社發(fā)展指南
- 語音智能家居怎么安裝
- 項(xiàng)目調(diào)研報(bào)告及分析
- 體育產(chǎn)業(yè)發(fā)展規(guī)劃細(xì)節(jié)對(duì)比表
- 主管護(hù)師內(nèi)科護(hù)理復(fù)習(xí)測(cè)試題
- 高中英語-新外研版必修一unit5-The-Monarchs-Journey-公開課reading課件
- 氣象報(bào)文日常航空天氣報(bào)告電報(bào)翻譯
- 建設(shè)項(xiàng)目用地預(yù)審與選址意見課件講解
- DB44∕T 1049-2012 物業(yè)服務(wù) 綠化養(yǎng)護(hù)檢查規(guī)范
- 腹膜透析治療的護(hù)理-課件資料
- 國家開放大學(xué)《調(diào)劑學(xué)(本)》形考任務(wù)1-4參考答案
- 幼兒園小班繪本:《一步一步_走啊走》 PPT課件
- 《基礎(chǔ)和聲學(xué)》試習(xí)題庫(6套答案)
- 馬克思主義政治經(jīng)濟(jì)學(xué)課程講義
- SolidWorks、CAD三維建模練習(xí)習(xí)題圖
- HONEYWELLDCS操作手冊(cè)
評(píng)論
0/150
提交評(píng)論