chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于軟件開發(fā)編程規(guī)范及原則

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-20 14:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前面 Ⅰ

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

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

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

關(guān)于編程規(guī)范及原則 Ⅱ

編程規(guī)范也就是編寫出簡潔、可維護、可靠、可測試、高效、可移植的代碼,提高產(chǎn)品代碼的質(zhì)量。

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

1.頭文件

對于C語言來說,頭文件的設(shè)計體現(xiàn)了大部分的系統(tǒng)設(shè)計,不合理的頭文件布局是編譯時間過長的原因。

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

原則:

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

B.頭文件應(yīng)當(dāng)職責(zé)單一;

C.頭文件應(yīng)向穩(wěn)定的方向包含。

規(guī)則:

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

B.禁止頭文件循環(huán)依賴;

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

D.頭文件應(yīng)當(dāng)自包含;

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

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

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

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

建議:

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

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

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

D.同一產(chǎn)品統(tǒng)一包含頭文件排列方式。

2.函數(shù)

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

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

原則:

A.一個函數(shù)僅完成一件功能;

B.重復(fù)代碼應(yīng)該盡可能提煉成函數(shù).

規(guī)則:

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

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

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

D.對參數(shù)的合法性檢查,由調(diào)用者負(fù)責(zé)還是由接口函數(shù)負(fù)責(zé),應(yīng)在項目組/模塊內(nèi)應(yīng)統(tǒng)一規(guī)定;

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

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

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

建議:

A.函數(shù)不變參數(shù)使用const;

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

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

D.函數(shù)的參數(shù)個數(shù)不超過5個;

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

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

3.標(biāo)識符命名與定義

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

3.1通用命名規(guī)則

常見命名風(fēng)格:

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

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

規(guī)則:

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

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

C.產(chǎn)品/項目組內(nèi)部應(yīng)保持統(tǒng)一的命名風(fēng)格.

建議:

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

B.盡量避免名字中出現(xiàn)數(shù)字編號,除非邏輯上的確需要編號;

C.標(biāo)識符前不應(yīng)添加模塊、項目、產(chǎn)品、部門的名稱作為前綴;

D.平臺/驅(qū)動等適配代碼的標(biāo)識符命名風(fēng)格保持和平臺/驅(qū)動一致;

E.重構(gòu)/修改部分代碼時,應(yīng)保持和原有代碼的命名風(fēng)格一致。

3.2 文件命名規(guī)則

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

3.3 變量命名規(guī)則

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

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

規(guī)則:

A.全局變量增加“g_”前綴,靜態(tài)變量增加“s_”前綴;

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

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

3.4 函數(shù)命名規(guī)則

A.函數(shù)命名應(yīng)以函數(shù)要執(zhí)行的動作命名,一般采用動詞或者動詞+名詞的結(jié)構(gòu);

B.函數(shù)指針除了前綴,其他按照函數(shù)的命名規(guī)則命名。

3.5 宏的命名規(guī)則

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

B.除了頭文件或編譯開關(guān)等特殊標(biāo)識定義,宏定義不能使用下劃線?_?開頭和結(jié)尾。

4.變量

原則:

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

B.結(jié)構(gòu)功能單一;不要設(shè)計面面俱到的數(shù)據(jù)結(jié)構(gòu);

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

規(guī)則:

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

B.通訊過程中使用的結(jié)構(gòu),必須注意字節(jié)序;

C.嚴(yán)禁使用未經(jīng)初始化的變量作為右值;

建議:

A.構(gòu)造僅有一個模塊或函數(shù)可以修改、創(chuàng)建,而其余有關(guān)模塊或函數(shù)只訪問的全局變量,防止多個不同模塊或函數(shù)都可以修改、創(chuàng)建同一全局變量的現(xiàn)象;

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

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

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

E.盡量減少沒有必要的數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換與強制轉(zhuǎn)換。

5.宏、常量

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

規(guī)則:

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

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

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

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

C.使用宏時,不允許參數(shù)發(fā)生變化;

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

int a = 5;

int b;

不規(guī)范:

b = SQUARE(a++);

規(guī)范:

b = SQUARE(a);

a++;

建議:

A.除非必要,應(yīng)盡可能使用函數(shù)代替宏;

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

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

6.注釋

原則:

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

B.注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性;

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

規(guī)則:

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

B.文件頭部應(yīng)進行注釋,注釋必須列出:版權(quán)說明、版本號、生成日期、作者姓名、工號、內(nèi)容、功能說明、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)功能簡要說明;

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

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

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

F.避免在注釋中使用縮寫,除非是業(yè)界通用或子系統(tǒng)內(nèi)標(biāo)準(zhǔn)化的縮寫;

G.同一產(chǎn)品或項目組統(tǒng)一注釋風(fēng)格。

建議:

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

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

7.排版與格式

規(guī)則:

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

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

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

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

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

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

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

說明 Ⅲ

關(guān)于編程規(guī)范、原則等相關(guān)的文章在國外很多優(yōu)秀的工程師都總結(jié)的有:

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146094
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3723

    瀏覽量

    97423
  • 開發(fā)編程
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    5848
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    網(wǎng)絡(luò)分析儀程控軟件開發(fā)工具平臺介紹

    在射頻測試領(lǐng)域,矢量網(wǎng)絡(luò)分析儀(以下簡稱“網(wǎng)分”)作為核心測量設(shè)備,廣泛應(yīng)用于通信、半導(dǎo)體、航空航天等行業(yè)的濾波器、放大器、天線等器件測試。隨著測試需求的自動化、智能化升級,網(wǎng)分程控軟件開發(fā)成為提升
    的頭像 發(fā)表于 03-06 18:05 ?945次閱讀
    網(wǎng)絡(luò)分析儀程控<b class='flag-5'>軟件開發(fā)</b>工具平臺介紹

    零代碼軟件開發(fā)平臺ATECLOUD如何實現(xiàn)儀器程控軟件開發(fā)?

    在電子測試領(lǐng)域,儀器控制軟件開發(fā)是硬件工程師開展測試工作的核心環(huán)節(jié)之一。面對這一需求,多數(shù)硬件工程師的第一反應(yīng)是借助成熟的編程工具與語言,諸如圖形化編程環(huán)境LabVIEW,或是Pyt
    的頭像 發(fā)表于 03-02 15:59 ?1650次閱讀
    零代碼<b class='flag-5'>軟件開發(fā)</b>平臺ATECLOUD如何實現(xiàn)儀器程控<b class='flag-5'>軟件開發(fā)</b>?

    不懂編程,怎么搞定電子儀表上位機軟件?零代碼搞定上位機軟件開發(fā)

    “不懂編程,怎么搞定電子儀表上位機軟件?”這是很多電子儀表用戶的共同困惑。傳統(tǒng)上位機開發(fā)被“專業(yè)編程”門檻牢牢限制,即便你對測試需求了如指掌(比如知道要采集哪些儀表數(shù)據(jù)、怎么分析波形、
    的頭像 發(fā)表于 01-27 17:19 ?711次閱讀
    不懂<b class='flag-5'>編程</b>,怎么搞定電子儀表上位機<b class='flag-5'>軟件</b>?零代碼搞定上位機<b class='flag-5'>軟件開發(fā)</b>

    ADC模數(shù)轉(zhuǎn)換實戰(zhàn):硬件設(shè)計與軟件開發(fā)要點指南!

    為實現(xiàn)高精度、高穩(wěn)定性的ADC模數(shù)轉(zhuǎn)換,硬件與軟件設(shè)計均需遵循特定原則。硬件層面需優(yōu)化信號調(diào)理、參考電壓及抗干擾設(shè)計;軟件層面需合理配置采樣參數(shù)、實現(xiàn)數(shù)據(jù)濾波及異常處理。本文將結(jié)合實際開發(fā)
    的頭像 發(fā)表于 12-16 13:25 ?552次閱讀
    ADC模數(shù)轉(zhuǎn)換實戰(zhàn):硬件設(shè)計與<b class='flag-5'>軟件開發(fā)</b>要點指南!

    CW32嵌入式軟件開發(fā)的必備知識

    嵌入式軟件開發(fā)作為計算機科學(xué)和電子工程的交叉領(lǐng)域,要求開發(fā)人員具備一系列的專業(yè)知識和技能。 而基于CW32的嵌入式軟件開發(fā)必備知識包括以下部分: 1 、編程語言 熟練掌握C(C++
    發(fā)表于 11-28 07:48

    融合AI的OpenHarmony應(yīng)用軟件開發(fā):ai學(xué)習(xí)自律輔助軟件

    *附件:ai study.zip*附件:融合AI的OpenHarmony應(yīng)用軟件開發(fā):ai學(xué)習(xí)自律輔助軟件.pdf 基于開源鴻蒙編寫的ai輔助學(xué)習(xí)軟件
    發(fā)表于 11-12 15:38

    芯科科技推出Simplicity Ecosystem軟件開發(fā)套件

    Silicon Labs(芯科科技)今日在深圳盛大舉辦享譽業(yè)界的Works With開發(fā)者大會,同時宣布推出Simplicity Ecosystem軟件開發(fā)套件,它不僅是下一代模塊化的軟件開發(fā)
    的頭像 發(fā)表于 10-27 16:45 ?1522次閱讀

    十大北京軟件開發(fā)公司推薦:有哪些優(yōu)點和缺點

    十大北京軟件開發(fā)公司推薦:有哪些優(yōu)點和缺點
    的頭像 發(fā)表于 10-04 09:44 ?4093次閱讀
    十大北京<b class='flag-5'>軟件開發(fā)</b>公司推薦:有哪些優(yōu)點和缺點

    2025北京軟件開發(fā)公司推薦匯總:盤點10家優(yōu)秀軟件定制開發(fā)公司

    2025北京軟件開發(fā)公司推薦匯總:盤點10家優(yōu)秀軟件定制開發(fā)公司
    的頭像 發(fā)表于 09-30 09:16 ?2912次閱讀
    2025北京<b class='flag-5'>軟件開發(fā)</b>公司推薦匯總:盤點10家優(yōu)秀<b class='flag-5'>軟件</b>定制<b class='flag-5'>開發(fā)</b>公司

    汽車軟件開發(fā)階段安全的意義與原則

    上海磐時PANSHI“磐時,做汽車企業(yè)的安全智庫”好書分享/《一本書讀懂智能汽車安全》汽車軟件開發(fā)階段安全的意義與原則本文節(jié)選自SASETECH汽車安全社區(qū)組織編寫的《一本書讀懂智能汽車安全》,該書
    的頭像 發(fā)表于 09-05 16:16 ?1087次閱讀
    汽車<b class='flag-5'>軟件開發(fā)</b>階段安全的意義與<b class='flag-5'>原則</b>

    知識分享 | 敏捷方法在基于模型的軟件開發(fā)項目中的應(yīng)用

    傳統(tǒng)的瀑布式軟件開發(fā)流程存在諸多局限,這使得應(yīng)用敏捷原則變得尤為重要,尤其是面對復(fù)雜且不斷變化的開發(fā)環(huán)境時。作為最高效的軟件開發(fā)方法之一,基于模型的
    的頭像 發(fā)表于 07-16 16:52 ?1404次閱讀
    知識分享 | 敏捷方法在基于模型的<b class='flag-5'>軟件開發(fā)</b>項目中的應(yīng)用

    主流機器視覺軟件開發(fā)平臺介紹及對比?

    機器視覺作為工業(yè)自動化的核心技術(shù),其軟件開發(fā)平臺的選擇直接影響項目的開發(fā)效率、成本及最終性能。本文將對比當(dāng)前主流的視覺開發(fā)平臺,包括LabVIEW、VisionPro、Halcon
    的頭像 發(fā)表于 07-14 09:44 ?2870次閱讀
    主流機器視覺<b class='flag-5'>軟件開發(fā)</b>平臺介紹及對比?

    嵌入式軟件開發(fā)常用的軟件有哪些?

    對于初學(xué)嵌入式的朋友們,會想要了解嵌入式軟件開發(fā)常用的軟件有些,有什么用。那么看以下常用的軟件介紹。 1.Visual Studio Code 簡稱VSCode:它是一款由微軟開發(fā)且跨
    發(fā)表于 07-03 17:06

    基于瑞薩64位MPU RZ/G2L進行32位應(yīng)用軟件開發(fā)

    本文主要介紹基于瑞薩64位MPU RZ/G2L進行32位應(yīng)用軟件開發(fā)的介紹,用于解決客戶32位軟件移植相關(guān)問題,供客戶參考。
    的頭像 發(fā)表于 06-26 15:48 ?2168次閱讀
    基于瑞薩64位MPU RZ/G2L進行32位應(yīng)用<b class='flag-5'>軟件開發(fā)</b>

    找電機控制軟件開發(fā)兼職

    軟件開發(fā)兼職人員,我現(xiàn)在有一個永磁無刷電機控制,220V,需要有相關(guān)經(jīng)驗的人來開發(fā),兼職費用可以議談,產(chǎn)品是增壓泵相關(guān)產(chǎn)品,有興趣給我留言,謝謝
    發(fā)表于 05-07 17:43