日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 大橙子瘋嵌入式


前言

這篇重點介紹一下代碼編程規(guī)范的擴(kuò)展要求-函數(shù)規(guī)范要求

  • 函數(shù)設(shè)計的精髓:編寫整潔函數(shù),同時把代碼有效組織起來。

  • 整潔函數(shù)要求:代碼簡單直接、不隱藏設(shè)計者的意圖、用干凈利落的抽象和直截了當(dāng)?shù)目刂普Z句將函數(shù)有機(jī)組織起來。

  • 代碼的有效組織包括:邏輯層組織和物理層組織兩個方面。邏輯層,主要是把不同功能的函數(shù)通過某種聯(lián)系組織起來,主要關(guān)注模塊間的接口,也就是模塊的架構(gòu)。物理層,無論使用什么樣的目錄或者名字空間等,需要把函數(shù)用一種標(biāo)準(zhǔn)的方法組織起來。例如:設(shè)計良好的目錄結(jié)構(gòu)、函數(shù)名字、文件組織等,這樣可以方便查找。

規(guī)范要求

【規(guī)范1】一個函數(shù)僅完成一件功能

一個函數(shù)實現(xiàn)多個功能給開發(fā)、使用、維護(hù)都帶來很大的困難。
將沒有關(guān)聯(lián)或者關(guān)聯(lián)很弱的語句放到同一函數(shù)中,會導(dǎo)致函數(shù)職責(zé)不明確,難以理解,難以測試和改動。

【規(guī)范2】重復(fù)代碼應(yīng)該盡可能提煉成函數(shù)

原因:重復(fù)代碼提煉成函數(shù)可以帶來維護(hù)成本的降低。

  1. 當(dāng)一段代碼重復(fù)兩次時,即應(yīng)考慮消除重復(fù),當(dāng)代碼重復(fù)超過三次時,應(yīng)當(dāng)立刻著手消除重復(fù)

  2. 當(dāng)一段代碼邏輯相同,但是內(nèi)部的部分變量和輸出不同,可以進(jìn)行提煉成函數(shù),內(nèi)部的不同變量作為入?yún)⒌确绞剑ㄓ行┻壿嬒嗤目梢允褂帽眚?qū)動方式)

【規(guī)范3】避免函數(shù)過長,新增函數(shù)不超過 50 行 (非空非注釋行)

原因:

  1. 過長的函數(shù)往往意味著函數(shù)功能不單一,過于復(fù)雜

  2. 延伸閱讀材料:業(yè)界普遍認(rèn)為一個函數(shù)的代碼行不要超過一個屏幕,避免來回翻頁影響閱讀(根據(jù)實際情況可以超過 50 行,自行把握)

【規(guī)范4】避免函數(shù)的代碼塊嵌套過深,新增函數(shù)的代碼塊嵌套不超過4層

函數(shù)的代碼塊嵌套深度指的是函數(shù)中的代碼控制塊(例如:if、for、while、switch等)之間互相包含的深度
原因:每級嵌套都會增加閱讀代碼時的腦力消耗,需要記住前一級的狀態(tài),不利于代碼閱讀
做法:可以使用平級的代碼控制塊,如

// 錯誤示例 void serial(void) { if (...)
 { if (...)
 { if (...)
 {
 ...;
 }
 }
 }
} // 正確示例 void serial(void) { if (!...)
 { return;
 } if (!...)
 { return;
 }

 ...;
}

【規(guī)范5】對參數(shù)的合法性檢查,如果公司有相關(guān)規(guī)定,則按照規(guī)定走,如果沒有,則由接口函數(shù)負(fù)責(zé)。

對于模塊間接口函數(shù)的參數(shù)的合法性檢查這一問題,往往有兩個極端現(xiàn)象,即:要么是調(diào)用者和被調(diào)用者對參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這一必要的處理過程,造成問題隱患;要么就是調(diào)用者和被調(diào)用者均對參數(shù)進(jìn)行合法性檢查,這種情況雖不會造成問題,但產(chǎn)生了冗余代碼,降低了效率。

【規(guī)范6】檢查函數(shù)所有非參數(shù)輸入的有效性,如數(shù)據(jù)文件、公共變量等

函數(shù)的輸入主要有兩種:一種是參數(shù)輸入;另一種是全局變量、數(shù)據(jù)文件的輸入,即非參數(shù)輸入。函數(shù)在使用輸入?yún)?shù)之前,應(yīng)進(jìn)行有效性檢查,防止調(diào)用者使用函數(shù)時傳入不合理的入?yún)?,?dǎo)致系統(tǒng)崩潰

【規(guī)范7】函數(shù)的參數(shù)個數(shù)不超過5個

函數(shù)的參數(shù)過多,會使得該函數(shù)易于受外部(其他部分的代碼)變化的影響,從而影響維護(hù)工作。函數(shù)的參數(shù)過多同時也會增大測試的工作量。
函數(shù)的參數(shù)個數(shù)不要超過5個,如果超過了建議拆分為不同函數(shù),或者使用結(jié)構(gòu)體作為入?yún)ⅲńY(jié)構(gòu)體作為入?yún)r,盡量使用使用指針傳遞,提高效率)

【規(guī)范8】函數(shù)中的不變參數(shù)或者函數(shù)入?yún)⒃诤瘮?shù)內(nèi)不會改變使const

  1. 不變的值更易于理解/跟蹤和分析,把const作為默認(rèn)選項,在編譯時會對其進(jìn)行檢查,使代碼更牢固/更安全

  2. 對應(yīng)調(diào)用者而言,函數(shù)的入?yún)⑷绻莄onst, 則一眼就能明白哪些是入?yún)?

【規(guī)范9】函數(shù)入?yún)⒌亩x順序應(yīng)是輸出參數(shù)比輸入?yún)?shù)先定義

主要是統(tǒng)一規(guī)范,如函數(shù)memcpy、sprintf、memset等等,輸出參數(shù)都是在函數(shù)的入?yún)⒅邢榷x

【要求 10】函數(shù)應(yīng)避免使用全局變量、靜態(tài)局部變量和 I/O 操作,不可避免的地方應(yīng)集中使用

實際開發(fā)過程中,難免會存在函數(shù)使用全局變量、靜態(tài)局部變量和 I/O 操作,但是為了提高代碼閱讀性,建議集中使用

【規(guī)范11】在源文件范圍內(nèi)聲明和定義的所有函數(shù),除非外部可見,否則應(yīng)該增加static關(guān)鍵字

如果一個函數(shù)只是在同一文件中的其他地方調(diào)用,那么就用static聲明。使用static確保只是在聲明它的文件中是可見的,并且避免了和其他文件或庫中的相同標(biāo)識符發(fā)生混淆的可能性;且在閱讀上能迅速了解哪些是非公開函數(shù)。



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉