嵌入式軟件編程規範(C語言)

〇、前言

代碼編程我認爲也是一門藝術,優美的代碼使人賞心悅目。然而編程規範並沒有唯一的行業標準,就像windows和linux的代碼各具風格。本文是作者本人在多年嵌入式軟件開發中所總結出的一些經驗,僅作讀者參考。

一、排版格式

0.在同一個項目中的所有代碼應保持一致的代碼風格,引用第三方庫文件源碼的除外。
1.代碼行首縮進使用TAB鍵,TAB寬度設置爲4個字符。
2. 一條語句佔一行,不要把多條語句寫到一行。
3. 每行代碼不要超過100個字符,含有字符串的語句可酌情延長(如打印日誌)。
4. 這些關鍵字須獨佔一行:if、else、for、do、while、switch、case、default等。
5. 所有的if、else、for、do、while語句後面都要加上花括號{}。
6. 代碼塊的花括號{}應獨佔一行,並且保持代碼塊和花括號縮進對齊。
7. 相對獨立的代碼塊之間應添加一個空行分隔開。
8. 在文件末尾添加一個空行。
9. 定義指針變量時星號的位置應遠離類型,向右靠近變量。
10.函數的多個參數之間使用一個空格隔開,有利於閱讀。

二、註釋

0.註釋的原則是以人爲本,註釋語言儘量使用簡體中文,必須準確、簡潔、易懂。
1.在源文件的頭部添加註釋,列出該模塊的關鍵性功能說明、作者、創建日期等。
2.對接口函數進行詳細註釋,列出函數的功能、輸入參數、返回值。
3.對內部函數進行簡要註釋,列出函數的功能和必要的參數說明。
4.對代碼塊和函數的註釋應放在其上方相鄰位置,單行代碼和變量註釋放在右方相鄰位置。
5.禁止在一行代碼或表達式的中間插入註釋。
6.單行註釋使用//,多行註釋使用/**/。

三、命名規則

0.標識符的命名要簡潔明瞭,能夠通過名稱直觀地瞭解到該標識符所表達的含義。
1.通常用一個或多個英文單詞來命名,原則上禁止使用中文拼音,多個單詞之間用下劃線連接。
2.遇到太長的英文單詞可以採用縮寫的形式,縮寫可以去掉元音字母或者截取單詞的前面幾個字母,儘量採用大家都能理解的縮寫單詞。
3.對於理解有困難的縮寫應該加以註釋。
4.變量、函數、結構體、類型定義標識符使用小寫字母。
6.宏、常量、枚舉成員使用大寫字母。
6. 循環變量等具有特殊含義的變量可以使用單個字符作爲變量名字(形如i、j、k)。
7. 變量命名不要在變量名前面添加冗餘類型前綴。
例如:unsigned int ui_size;
改爲:unsigned int size;
8. 防止全局變量和靜態變量與局部變量衝突,可添加特定前綴(g_、m_)表明作用域。
9. 使用typedef定義的類型標識符使用“_t”做爲後綴。
10. 作用域爲全局範圍的函數、宏、枚舉成員,應使用模塊化的命名規則。即:以模塊/對象名作爲前綴。

四、聲明與定義

0.儘量使用編程語言提供的標準數據類型,如char、int、float等。
1.不要自行定義固定字長的數據類型,因爲標準庫<stdint.h>已經提供了此類型(如uint8_t、int32_t等)。
2.謹慎使用條件編譯功能,因爲條件編譯會降低代碼可讀性。
3.項目中廣泛引用的數據類型或定義,應考慮把它們集中到一個頭文件中,如<define.h>。
4.頻繁使用的代碼塊應考慮定義成爲函數。
5.避免隨機亂序定義變量,將具有關聯性的變量定義放到一起。
6.文件內部引用的全局變量和函數必須加上static聲明。
7.被引用的枚舉類型應使用typedef定義爲自定義類型。
8.結構體的使用者如果不會訪問其成員變量,則應使用typedef定義爲自定義類型。
9.每個.c文件最多隻能有一個與之對應的.h頭文件聲明其對外輸出的接口函數。
10.明確頭文件的使用者,不要在頭文件中定義使用者不關心的數據定義或函數。

五、 模塊化編程

0.模塊化編程即是把整個項目代碼分解爲一個個功能獨立的模塊,良好的模塊化設計可以極大地提高代碼的維護性和複用性。
1.一個模塊通常由一個或多個.c源文件和一個聲明接口的.h頭文件組成。
2.模塊化設計的關鍵在於分解功能,一個模塊只實現較爲獨立的單一功能。
3.根據模塊所實現的功能大致分爲應用層、功能層、驅動層,可以細分更多層次。
4.應用層屬於最頂層,是整個項目業務需求最直觀的體現,依賴於下層的模塊。應用層的模塊通常提供的接口函數很少,且都是初始化、啓動、停止等操作。
5.功能層屬於中間層,一般用於連接應用層和驅動層的橋樑,是實現業務需求的支柱。功能層的模塊通常處理驅動層的數據傳遞給應用層,比如協議解析,數據處理等。
6.驅動層屬於最低層,負責和底層硬件打交道,只處理硬件數據,不關心具體應用。因此驅動層的代碼應該具有很強的可複用性,在不同的項目中應該可以直接重複使用。
7.函數調用層次需遵循上層模塊調用同層或下層模塊的接口,切勿在底層模塊中直接調用上層模塊的函數。
8.模塊之間通信使用輪尋或回調函數的方式,降低各模塊之間的耦合性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章