為什麼嵌入式C語言程式設計要有編碼規範
本期和接下來幾期的專題都是與嵌入式C語言編碼規範相關。首先來看兩段有效程式碼完全一樣的程式碼(原始碼取自某晶片的韌體庫,程式碼檢視器選用的UEStudio,檢視配置為顯示空格和Tab)。大家可以感受下,同樣的程式碼,兩種編碼風格比較起來,你看懂程式碼所需要的時間哪個更短。
這裡簡單講解下:
程式碼1的if塊語句的大括號沒有另起並獨佔一行,縮排沒有統一使用空格(不同的編譯器和程式碼閱讀器對tab鍵的解析規則是不一樣的),加上邏輯獨立的if之間缺乏空行,會給不熟悉該程式碼的程式設計師造成閱讀障礙。如果if裡面有多層巢狀的話,程式碼層級關係看起來就有會更加凌亂,理解效率會更加低下。
言歸正傳,什麼是程式碼編碼規範呢?編碼規範指的是從程式碼的正確性、穩定性、可讀性等方面識別出來的在編碼過程中要遵循的規則,例如程式碼的排版規則,註釋方法,函式、變數命名規則等等。我曾經先後在三個規模比較大的公司任職,這些公司都有嚴格實行C語言編碼規範,尤其以一加汽車行業的公司要求最為嚴格,除了要遵循MISRA C以外,公司還購買了專業的程式碼檢查工具,並自定義了一系列命名規則,進行程式碼規範化檢查,對於所有違規項都需要更正,因特殊情況無法規避的,需要逐條註明原因,否則專案無法往前推動。曾經苦逼的我,一個星期需要對1000+條違規項進行逐條檢查。
那為什麼要制定規則來規範編碼過程呢?其實想想實行好的編碼規範能帶來哪些好處就很明確:
1. 提高程式碼的可讀性:如果沒有程式碼規範的規約,即便是同一個人,他在不同時期程式碼的寫法與風格都會有差異,更不用說由多人組成的團隊了。相同的命名規則,編排方法,註釋原則,能大大提高程式的可讀性。
2. 提高程式碼的正確性和健壯性:編碼規範一般都會有基於準確性和安全性方面的條例,幫助程式設計師編寫出準確性高和健壯性好的程式碼,例如在MISRA C中規定所有的if ... else if結構應該由else子句結束。else語句或者要執行適當的動作,或者要包含合適的註釋以說明為何沒有執行動作。這與switch語句中要求具有最後一個必須有default結束一致,都是為了防止程式漏了考慮特殊情況而導致非預期結果,從而引發異常。
3. 快速提高程式設計師的編碼能力:編碼規範往往都是行業內人士的經驗積累,很多條例都是由“過來人”踩過的坑,吃過的虧轉換而來。對於經驗較少的程式設計師,可以通過閱讀和遵守編碼規則快速提高自身的編碼能力,寫出更加高質量的程式碼。
最後談一談如何看待編碼規範:
1. 編碼規範一旦制定就必須嚴格遵守,尤其是在由多個開發人員組成的團隊中;
2. 編碼規範並非一成不變的,需要在實際工作過程中將一些不良編碼導致bug的經驗提煉為新的條例;
3. 要持開放的心態看待不同的編碼規範,尤其是一些程式碼風格方面的規定,程式碼如人,風格的差異很正常,要做到彼此尊重。
擴充套件閱讀,百度一下均可找到:
1. MISRA C 2012
2. 華為C/C++編碼規範和範例
公眾號剛開通使用,活躍度不高,所以無法在文章內留言。如需交流,可以聯絡:
QQ群:478737279(加群請註明理由)
微訊號:15914137911
歡迎掃碼關注本公眾號,會不定期推送嵌入式軟硬體設計方面的乾貨。