如何寫出好的C語言代碼??html
讓小編爲你細細道來!
算法
總的來講,評價代碼好壞的標準萬變不離其宗,主要包括以下幾個方面:編程
穩定性:在不一樣的負載和應用場景下,都能獲得正確的輸出,性能也沒比較大的抖動安全
健壯性:考慮到各類corner cases性能優化
魯棒性:錯誤的輸入、配置、異常或故障不會擴散到其餘(更多)的模塊數據結構
可擴展性:上下層模塊之間有固定的接口,橫向模塊之間低耦合架構
易維護程度:可讀性強,準確且足夠的註釋,便於調試,容易測試和調試框架
固然,系統的學習是一切考慮的前提:http://edu.51cto.com/course/courseList/id-12.html函數
總的來講兩個方面進行考慮:工具
1、明確需求和接口,選好算法和數據結構
開始編程以前,可用需求定義、層次劃分、模塊設計、接口定義先行,不須要快速實現C代碼,能夠先分層、劃分好子模塊,肯定好具體的算法和架構後,先大體定義 出頭文件,而且在頭文件中用註釋的方式快速描述、確認頭文件中各個接口函數的輸入、輸出參數,以及前提假設、臨界條件。
2.利用已有的編碼經驗教訓,使用靜態和動態工具檢查
下面列出了許多經常使用的C 編碼規範,可供參考和檢查:
頭文件中 #ifndef XXX; #define XXX;#endif 用來防止重複應用;
考慮進對 C++的支持;extern "C"
使用嚴格定義的數據類型:用uint8_t; uint32_t, uint64_t,size_t等代替char/int/short/long
用indent 統一格式;
編譯時打開全部警告: -Wall
用splint作安全和穩定性檢查;
封裝容易出現問題的alloc();free();ralloc();realloc()
甄別錯誤和異常狀況,在調試版代碼中使用 assert(), assert_perror(),而且保證在正式release中去掉。
調試版本總考慮用不一樣的代碼/算法確保核心代碼;
測試代碼和功能代碼並行進行,而且儘快搭建針對所開發模塊的自動測試框架;
利用GDB進行代碼走讀
對走讀過程當中碰到的&& /||/ ? :操做符號,可先打印出當前的狀態,而後能夠經過gdb來確認或者修改 將走到的路徑
避免getchar(), mallocate()這類返回值既可能表示運行正確與否,又能表示具體數值或地址相關的函數定義或實現,若是基礎庫的代碼中有它,儘可能避免它;若是設計的庫函數中有它,儘可能經過返回flag的方式來講明它。
儘可能避免用地址比較做爲判斷退出循環的條件,由於地址不肯定,存在上溢或者下溢的可能;
精確地實現而非近似地實現功能或者函數
注意下溢或者上溢:
下溢: short i; i = -i; (當i=-32768時, short (- i)仍是-32768)
不要經過移位來替代除法以賺取一點微小的性能優化,由於這樣會犧牲代碼的清晰度
總的來講,在學習的過程當中就要養成好習慣,跟着名師學習每每能事半功倍:http://edu.51cto.com/course/courseList/id-12.html