在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于軟件開發編程規范及原則

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-20 14:16 ? 次閱讀

寫在前面 Ⅰ

不知道大家有沒有這樣的感受:看到不規范(雜亂差)的代碼,瞬間就沒有看下去的欲望了。

相信大家看到標題都應該能明白編程的規范及原則對于每一個軟件開發的工程師來說是多么重要。

初學者編寫測試程序、小的模塊程序也許不能感受它的重要性;但有經驗及大型項目開發的人就知道程序的規范性對他們來說是有多么的重要。

關于編程規范及原則 Ⅱ

編程規范也就是編寫出簡潔、可維護、可靠、可測試、高效、可移植的代碼,提高產品代碼的質量。

本文針對嵌入式,主要結合C語言編程的規范給大家講述。

1.頭文件

對于C語言來說,頭文件的設計體現了大部分的系統設計,不合理的頭文件布局是編譯時間過長的原因。

有很多人將工程中所有的頭文件包含在一個include.h文件中,然后在每一個.c源代碼文件中包含include.h頭文件,這樣做可以讓代碼看上去簡潔,但實際忽視了編譯效率問題,而且代碼的可移植性也不好。

原則:

A.頭文件中適合放置接口的聲明,不適合放置實現;

B.頭文件應當職責單一;

C.頭文件應向穩定的方向包含。

規則:

A.每一個.c文件應有一個同名.h文件,用于聲明需要對外公開的接口;

B.禁止頭文件循環依賴;

C..c/.h文件禁止包含用不到的頭文件;

D.頭文件應當自包含;

E.總是編寫內部#include保護符( #define 保護);

F.禁止在頭文件中定義變量;

G.只能通過包含頭文件的方式使用其他.c提供的接口,禁止在.c中通過extern的方式使用外部函數接口、變量;

H.禁止在extern "C"中包含頭文件。

建議:

A.一個模塊通常包含多個.c文件,建議放在同一個目錄下,目錄名即為模塊名。為方便外部使用者,建議每一個模塊提供一個.h,文件名為目錄名;

B.如果一個模塊包含多個子模塊,則建議每一個子模塊提供一個對外的.h,文件名為子模塊名(降低接口使用者的編寫難度);

C.頭文件不要使用非習慣用法的擴展名,如.inc;

D.同一產品統一包含頭文件排列方式。

2.函數

函數設計的要點:編寫整潔的函數,同時把代碼有效組織起來。

函數整潔的要求:代碼簡單直接、不隱藏設計者的意圖、用干凈利落的抽象和直截了當的控制語句將函數有機組織起來。

原則:

A.一個函數僅完成一件功能;

B.重復代碼應該盡可能提煉成函數.

規則:

A.避免函數過長,新增函數不超過100行(非空非注釋行);

B.避免函數的代碼塊嵌套過深,新增函數的代碼塊嵌套不超過4層;

C.可重入函數應避免使用共享變量;若需要使用,則應通過互斥手段(關中斷、信號量)對其加以保護;

D.對參數的合法性檢查,由調用者負責還是由接口函數負責,應在項目組/模塊內應統一規定;

E.對函數的錯誤返回碼要全面處理;

F.設計高扇入,合理扇出(小于7)的函數;

G.廢棄代碼(沒有被調用的函數和變量)要及時清除。

建議:

A.函數不變參數使用const;

B.函數應避免使用全局變量、靜態局部變量和I/O操作,不可避免的地方應集中使用;

C.檢查函數所有非參數輸入的有效性,如數據文件、公共變量等;

D.函數的參數個數不超過5個;

E.除打印類函數外,不要使用可變長參函數;

F.在源文件范圍內聲明和定義的所有函數,除非外部可見,否則應該增加static關鍵字。

3.標識符命名與定義

程序命名是一個關鍵,如果命名不規范,自己寫的代碼,時間長了恐怕連自己都不知道是什么意思了。

3.1通用命名規則

常見命名風格:

A.用下劃線?_?分割,如text_mutex;

B.大小寫字母混用,如ReadRFCText。

規則:

A.標識符的命名要清晰、明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解;

B.除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音;

C.產品/項目組內部應保持統一的命名風格.

建議:

A.用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等;

B.盡量避免名字中出現數字編號,除非邏輯上的確需要編號;

C.標識符前不應添加模塊、項目、產品、部門的名稱作為前綴;

D.平臺/驅動等適配代碼的標識符命名風格保持和平臺/驅動一致;

E.重構/修改部分代碼時,應保持和原有代碼的命名風格一致。

3.2 文件命名規則

因為不同系統對文件名大小寫處理會不同,建議文件命名統一采用小寫字符。

3.3 變量命名規則

首先,全局變量十分危險,通過前綴使得全局變量更加醒目, 促使開發人員對這些變量的使用更加小心。

其次,從根本上說,應當盡量不使用全局變量,增加g_和s_前綴,會使得全局變量的名字顯得很丑陋,從而促使開發人員盡量少使用全局變量。

規則:

A.全局變量增加“g_”前綴,靜態變量增加“s_”前綴;

B.禁止使用單字節命名變量,但允許定義i、 j、 k作為局部循環變量;

C.使用名詞或者形容詞+名詞方式命名變量。

3.4 函數命名規則

A.函數命名應以函數要執行的動作命名,一般采用動詞或者動詞+名詞的結構;

B.函數指針除了前綴,其他按照函數的命名規則命名。

3.5 宏的命名規則

A.對于數值或者字符串等等常量的定義,建議采用全大寫字母,單詞之間加下劃線?_?的方式命名(枚舉同樣建議使用此方式定義);

B.除了頭文件或編譯開關等特殊標識定義,宏定義不能使用下劃線?_?開頭和結尾。

4.變量

原則:

A.一個變量只有一個功能,不能把一個變量用作多種用途;

B.結構功能單一;不要設計面面俱到的數據結構;

C.不用或者少用全局變量。

規則:

A.防止局部變量與全局變量同名;

B.通訊過程中使用的結構,必須注意字節序;

C.嚴禁使用未經初始化的變量作為右值;

建議:

A.構造僅有一個模塊或函數可以修改、創建,而其余有關模塊或函數只訪問的全局變量,防止多個不同模塊或函數都可以修改、創建同一全局變量的現象;

B.使用面向接口編程思想,通過API訪問數據:如果本模塊的數據需要對外部模塊開放,應提供接口函數來設置、獲取,同時注意全局數據的訪問互斥;

C.在首次使用前初始化變量,初始化的地方離使用的地方越近越好;

D.明確全局變量的初始化順序,避免跨模塊的初始化依賴;

E.盡量減少沒有必要的數據類型默認轉換與強制轉換。

5.宏、常量

因為宏只是簡單的代碼替換,不會像函數一樣先將參數計算后,再傳遞。

規則:

A.用宏定義表達式時,要使用完備的括號;

不規范:#defineRECTANGLE_AREA(a, b) a * b

規范:#defineRECTANGLE_AREA(a, b) ((a) * (b))

B.將宏所定義的多條表達式放在大括號中;

C.使用宏時,不允許參數發生變化;

#define SQUARE(a) ((a) * (a))

int a = 5;

int b;

不規范:

b = SQUARE(a++);

規范:

b = SQUARE(a);

a++;

建議:

A.除非必要,應盡可能使用函數代替宏;

B.常量建議使用const定義代替宏;

C.宏定義中盡量不使用return、 goto、 continue、 break等改變程序流程的語句。

6.注釋

原則:

A.優秀的代碼可以自我解釋,不通過注釋即可輕易讀懂;

B.注釋的內容要清楚、明了,含義準確,防止注釋二義性;

C.在代碼的功能、意圖層次上進行注釋,即注釋解釋代碼難以直接表達的意圖,而不是重復描述代碼。

規則:

A.修改代碼時,維護代碼周邊的所有注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪;

B.文件頭部應進行注釋,注釋必須列出:版權說明、版本號、生成日期、作者姓名、工號、內容、功能說明、與其它文件的關系、修改日志等,頭文件的注釋中還應有函數功能簡要說明;

C.函數聲明處注釋描述函數功能、性能及用法,包括輸入和輸出參數、函數返回值、可重入的要求等;定義處詳細描述函數功能和實現要點,如實現的簡要步驟、實現的理由、 設計約束等;

D.全局變量要有較詳細的注釋,包括對其功能、取值范圍以及存取時注意事項等的說明;

E.注釋應放在其代碼上方相鄰位置或右方,不可放在下面。 如放于上方則需與其上面的代碼用空行隔開,且與下方代碼縮進相同;

F.避免在注釋中使用縮寫,除非是業界通用或子系統內標準化的縮寫;

G.同一產品或項目組統一注釋風格。

建議:

A.避免在一行代碼或表達式的中間插入注釋;

B.文件頭、函數頭、全局常量變量、類型定義的注釋格式采用工具可識別的格式。

7.排版與格式

規則:

A.程序塊采用縮進風格編寫, 每級縮進為4個空格;

B.相對獨立的程序塊之間、變量說明之后必須加空行;

C.一條語句不能過長,如不能拆分需要分行寫。一行到底多少字符換行比較合適,產品可以自行確定;

D.多個短語句(包括賦值語句)不允許寫在同一行內,即一行只寫一條語句;

E.if、 for、 do、 while、 case、 switch、 default等語句獨占一行;

F.在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格; 進行非對等操作時,如果是關系密切的立即操作符(如->),后不應加空格;

G.注釋符(包括?/*??//??*/?)與注釋內容之間要用一個空格進行分隔。

說明 Ⅲ

關于編程規范、原則等相關的文章在國外很多優秀的工程師都總結的有:

http://www.artima.com/weblogs/viewpost.jsp?thread=331531

良好的編程習慣是需要日積月累的,如果你處于學習階段,請你時刻要注意這些細節問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7628

    瀏覽量

    139758
  • 編程
    +關注

    關注

    88

    文章

    3673

    瀏覽量

    94697
  • 開發編程
    +關注

    關注

    0

    文章

    4

    瀏覽量

    5802
收藏 人收藏

    評論

    相關推薦

    我國軟件開發者數量突破940萬

    2024開放原子開發者大會20到21日在武漢舉辦。工業和信息化部負責人透露,我國軟件開發者數量突破940萬。 開源就是開放軟件的源代碼,在遵守許可協議的前提下,任何人都可以使用、修改甚至再發布源代碼
    的頭像 發表于 12-24 13:52 ?357次閱讀

    我國軟件開發者數量超過940萬

    在近日舉辦的開放原子開發者大會上,工業和信息化部負責人傳來了一則令人振奮的消息:我國軟件開發者數量已經突破940萬大關。這一數據不僅彰顯了我國在軟件開發領域的雄厚實力,也預示著我國在全球軟件開
    的頭像 發表于 12-23 11:08 ?466次閱讀

    一文了解嵌入式軟件開發的對象

    以前應用場景很單一,嵌入式開發可能談不上面向對象開發。但現在,做嵌入式開發,沒有面向對象開發,你就有點落伍了。 本文結合個人經驗和周立功《抽象接口技術和組件
    的頭像 發表于 11-15 10:31 ?673次閱讀
    一文了解嵌入式<b class='flag-5'>軟件開發</b>的對象

    BQ7690x軟件開發指南

    電子發燒友網站提供《BQ7690x軟件開發指南.pdf》資料免費下載
    發表于 11-07 10:19 ?1次下載
    BQ7690x<b class='flag-5'>軟件開發</b>指南

    北京軟件開發公司有那些?做軟件的公司有哪些?

    北京作為中國的科技創新中心之一,擁有眾多提供軟件開發服務的公司。以下是一些在北京地區較為知名的軟件開發公司: 華盛恒輝科技有限公司:是一家專注于高端軟件定制開發服務和高端建設的服務機構
    的頭像 發表于 10-28 15:02 ?924次閱讀

    TMS320C6201 DSP軟件開發技術

    電子發燒友網站提供《TMS320C6201 DSP軟件開發技術.pdf》資料免費下載
    發表于 10-26 09:25 ?0次下載
    TMS320C6201 DSP<b class='flag-5'>軟件開發</b>技術

    PGA460軟件開發指南

    電子發燒友網站提供《PGA460軟件開發指南.pdf》資料免費下載
    發表于 10-09 10:30 ?5次下載
    PGA460<b class='flag-5'>軟件開發</b>指南

    PGA450-Q1軟件開發指南

    電子發燒友網站提供《PGA450-Q1軟件開發指南.pdf》資料免費下載
    發表于 09-30 14:25 ?1次下載
    PGA450-Q1<b class='flag-5'>軟件開發</b>指南

    ECU電控軟件開發及測試介紹

    本文重點介紹符合AutoSar架構的應用軟件開發、MBD開發模式下的軟件質量評估與優化方案、復雜場景下的ECU性能壓力測試方案。
    的頭像 發表于 09-26 14:25 ?3825次閱讀
    ECU電控<b class='flag-5'>軟件開發</b>及測試介紹

    TUSS44x0軟件開發指南

    電子發燒友網站提供《TUSS44x0軟件開發指南.pdf》資料免費下載
    發表于 09-14 10:59 ?0次下載
    TUSS44x0<b class='flag-5'>軟件開發</b>指南

    BQ769x2軟件開發指南

    電子發燒友網站提供《BQ769x2軟件開發指南.pdf》資料免費下載
    發表于 08-26 09:12 ?1次下載
    BQ769x2<b class='flag-5'>軟件開發</b>指南

    BQ769x2 軟件開發指南

    電子發燒友網站提供《BQ769x2 軟件開發指南.pdf》資料免費下載
    發表于 08-12 14:41 ?0次下載

    嵌入式軟件開發與AI整合

    嵌入式軟件開發與AI整合是當前技術發展的重要趨勢之一。隨著人工智能技術的快速發展,嵌入式系統越來越多地集成了AI算法,以實現更復雜的智能功能。以下是關于嵌入式軟件開發與AI整合的詳細分析
    的頭像 發表于 07-31 09:25 ?1160次閱讀
    嵌入式<b class='flag-5'>軟件開發</b>與AI整合

    【《軟件開發珠璣》閱讀體驗】+ 心得

    【《軟件開發珠璣》閱讀體驗】+ 心得 感謝電子發燒友論壇提供的讀書機會。讀這本書使我在編程方面多了位資深老師。 在軟件項目開發領域的時,我閱讀了《
    發表于 06-23 17:56

    上位機軟件開發用什么語言

    上位機軟件開發是指開發用于與下位機(如PLC、單片機等)進行通信、控制和數據處理的計算機軟件。上位機軟件在工業自動化、物聯網、智能家居等領域有著廣泛的應用。選擇合適的
    的頭像 發表于 06-06 10:44 ?2816次閱讀
    主站蜘蛛池模板: 手机看片1024精品日韩 | 国产一区二区三区乱码 | 天天综合网天天综合色不卡 | 日本理论在线观看被窝网 | 成 黄 色 激 情视频网站 | 国产免费黄视频 | 久热国产精品 | 欧美a在线 | 逼逼视频网站 | 男人和女人做爽爽视频在线观看 | 欧美精品videosex极品 | 国产男女免费视频 | 免费黄色国产视频 | 亚洲伦理中文字幕一区 | 六月婷婷激情综合 | 亚洲日本一区二区三区在线不卡 | 在线欧美成人 | 国产免费色视频 | 国产小视频在线观看免费 | 稀缺资源呦视频在线网站 | 96福利视频 | 国产日韩精品一区二区三区 | 一级特黄aa大片免费播放视频 | 夜夜夜夜操| 免费观看一级特黄欧美大片 | 四虎国产精品影库永久免费 | 手机在线观看你懂的 | 亚洲va久久久噜噜噜久久狠狠 | 亚洲第一免费播放区 | 国产精品人人爱一区二区白浆 | 99热这里只有精品一区二区三区 | 美女午夜影院 | 天堂免费在线视频 | 久色中文| 婷婷六月天在线 | 爱草视频 | 高清一区二区三区四区五区 | 亚洲精品久久久久影 | 国产精品理论片在线观看 | 日韩黄页| 午夜性爽爽爽 |