c語言編碼風格,講嵌入式C語言編碼風格.ppt

講嵌入式C語言編碼風格

目 錄 簡介及說明 語言規則 1.基礎 2.數據 3.說明與表達式 4.函數 5.內存及資源 6.源文件 風格指導 7.程序書寫 8.命名 9.文檔 簡介及說明 正確性 易維護性 易移植性 代碼的高效性 語言規則——基礎 編寫清晰表達設計思路和意圖的代碼 針對易讀來優化代碼, 效率優化留給編譯器去做 編寫可大聲朗讀的代碼 利用注釋闡述和解釋代碼,并進行總結 使用有意義且無歧義的命名方法.(推薦使用全英文的命名) 盡可能使用標準C 函數 不將同樣的代碼使用三次以上, 編寫相應的函數 讓程序自己檢查運行中的錯誤-編寫調試代碼 謹慎使用GOTO語句 不要修補那些風格差的代碼,重寫他們 不要比較兩個浮點數是否相等 優化代碼或調試一舊版本前,備份并記錄所做的修改 避免機器及編譯器相關的代碼,如必需,隔離相關代碼 將編譯器設為最高警告水平,把每一個警告視為錯誤來處理 不要直接在程序中直接書寫常量,應該使用常量的宏定義 #include 的頭文件沒有被引用 在同一個編譯單元內(一般是一C文件)重復引用同一頭文件 在頭文件內說明卻僅僅在一個C文件中引用 全局變量僅僅在一個C文件中引用. (應該使用static 量) 在賦值中,左右兩邊的數據類型不一樣. (如確實必須,應該顯式地進行類型轉換) 函數返回指向函數內說明的自動變量的指針. (應該使用指向static 變量的指針) 刪除switch case 語句中的break語句(除非兩個或多個case的處理代碼是完全一致的, 這時應該加以注釋。) 兩個不同類型指針間的運算 隱含的數據類型轉換 隱含的對于變量是否為0的測試 比如: “if (a = b)” ; 正確的寫法是 “if ( (a = b ) != 0)” 缺少default 的switch 語句 表達式中假設了運算順序 (不要怕寫括號) 忽略函數的返回值, 如果函數不需要返回值可使用 (void) f(); 但如果程序中無 返回值函數的數量太多,則系統的設計可能有問題 模塊間的依賴關系對于開發效率,可測性,可維護性都有很大的影響. 良好的依賴關系應該是簡單的,層次化的,和非循環的. 函數間傳遞的參數越少越好,減少模塊件的依賴關系和耦合程度,最大程度上實現對模塊的封裝,將模塊內的復雜性屏蔽,而對外提供簡潔的數據接口。 盡量減少全局變量的使用,局限在一個c文件中的全局變量應該說明為 static。 對于一組在邏輯上相關的變量,應該盡量將他們封裝在結構中。 推薦使用 typedef 來進行數據類型的說明。 所有不同類型變量間的運算,必須顯式地進行類型轉換。(這一點對于不同類型的指針間運算尤其重要) 對于沒有加 unsigned 修飾的類型, 應該小心處理可能的數據溢出 在程序( 函數或c文件 )的開始處對變量進行說明, 將相關的變量說明放在相鄰的行 變量的說明應該遵循一個變量一行的原則, 除非所說明的變量是緊密相關的 將不變的變量說明為 const 盡量在變量的說明行中對變量進行初始化 避免不必要的全局變量 什么時候使用指針? 該變量在其有效期內可能表示不同的對象. 該變量表示一個任意的關系, 也即其可能為空. 使用指針可能有更高的效率(關鍵代碼中)或更好的實現 避免無效的指針 假設任何指針都可能為空 使用NULL來比較指針,而不是0,僅有指針才會擁有NULL值 使用NULL 來表示指針不指向任何對象;使用 0x0 表示數值零; 使用 ’\0’表示字符串的結束. 只有在沒有更好的變通情況下使用GOTO 語句 確保數組的存取沒有越界 假設所有的臨時變量再使用完畢后就被立刻清除 所有函數的入口參數都必須進行合法性檢查 函數間的接口越簡潔越好, 參數傳遞應該盡可能的簡單 理想的函數應該僅有一個統一的返回點(出口) 對于某個具體的項目而言, 函數應該擁有盡量統一的返回值約定 函數的調用者應該檢查函數的返回值 過深層次的嵌套調用應該充分考慮系統或該進程的堆棧大小, 防止堆棧溢出 每個函數前必須有相應的說明 所有函數的返回類型必須顯式的定義, 沒有返回值的函數應該說明為void 函數前必須有相應的說明-范例 /********************************************************* *FUNCTION NAME :test_func * *ARGUMENT: *in_arg1: brief description of the argument *in_arg2: brief description of the argument *in_arg3:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Gradle引導舊式Ant構建

Gradle提供了幾種不同的方式來利用您現有的對Ant的投資,包括積累的知識和您已經放入構建文件中的時間。 這可以極大地方便將Ant生成的項目移植到Gradle的過程,并為您提供逐步進行此操作的路徑。 Gradle文檔在描述如何在Gradle構建腳本中使用Ant方面做得很…

實現chrome擴展啟動本地進程 - 補充

實現chrome擴展啟動本地進程 - 補充 標簽: chrome擴展啟動本地程序訪問本地磁盤2014-10-17 11:42 6753人閱讀 評論(17) 收藏 舉報分類:Chrome Plugin版權聲明:本文為博主原創文章,未經博主允許不得轉載。 示例 主要包含如下部分 c…

SpringMVC整合MongoDB

首先&#xff0c;在pom文件中新增spring-data-mongodb的依賴&#xff1a; <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.8.1.RELEASE</version>&l…

單路電壓表c語言編程,用AT89C51單片機制作的數字電壓表

此數字電壓表&#xff0c;利用A/D轉換原理將被測模擬量轉換成數字量&#xff0c;并通過控制系統用數字方式顯示測量結果。本設計采用AT89C51單片機&#xff0c;ADC0809進行模/數轉換&#xff0c;能夠測量8路0&#xff5e;5V的輸入電壓值&#xff0c;可用四位LED數碼管輪流或單路…

ZK的實際應用:MVVM –加載和渲染數據

先前的文章簡要介紹了RIA框架ZK&#xff0c;以及它CSS Selector啟發式控制器機制如何通過使在控制器類中引用UI組件的任務變得相對靈活來減輕UI更改所帶來的一些負擔。 然后&#xff0c;我們在上一篇文章中探討了ZK中的MVVM模式如何允許單個ViewModel提供不同的視圖。 這篇文章…

搭建一個簡單的mybatis框架

一、Mybatis介紹 MyBatis是一個支持普通SQL查詢&#xff0c;存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射&#xff0c;將接口和Java的POJO&#xff08;Pla…

定時操作范例

1 package timetask.demo;2 3 import java.text.SimpleDateFormat;4 import java.util.Date;5 import java.util.Timer;6 import java.util.TimerTask;7 8 /*9 * time類 是一個線程實施&#xff0c;可以用來實現在某一個時間或者某一個時間段后安排某一個任務執行一次或者定期…

c語言空格符 r t,c語言中、\t \r \n 和空格什么意思

具體意思&#xff1a;都是轉義字符&#xff0c;空格就是單純的空格&#xff0c;輸入時可以輸入空格\t 跳格 \r 回車 \n 換行\\ 反斜杠 \a 警告 \b 退格 \f 換頁 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八進制數字。轉義字符串(Escap…

如何在運行時更改日志記錄級別

在運行時中更改日志記錄級別很重要&#xff0c;這主要在生產環境中非常重要&#xff0c;在生產環境中&#xff0c;您可能希望在有限的時間內進行調試日志記錄。 好了&#xff0c;更改根記錄器非常簡單–假設您有一個具有所需記錄級別的輸入參數&#xff0c;只需獲取根記錄器并…

擴展中國剩余定理

轉自&#xff1a;http://blog.csdn.net/clove_unique/article/details/54571216 對于兩個方程$x\equiv c_1\pmod {m_1}$$x\equiv c_2\pmod {m_2}$將其合并為一個方程&#xff0c;有解條件為$(m1,m2)|(c2-c1)$$m\frac{m1m2}{(m1,m2)}$$c(inv(\frac{m1}{(m1,m2)},\frac{m2}{(m1,m…

易語言添加ctrl c鍵,易語言操作快捷鍵匯總

以下是關于易語言的快捷鍵內容&#xff1a;預覽被設計窗口 CtrlEnter運行 F5終止運行 CtrlF5編譯 F7菜單編輯器 CtrlE即時幫助 F1在編輯窗口之間跳轉。按下 Ctrl 鍵后不放&#xff0c;然后反復按 Tab 鍵可以在目前所有的編輯窗口之間跳轉&#xff1b;按下 Ctrl 鍵后同時按下 Ta…

在代理類中引用動態代理

在Stackoverflow中有一個有趣的問題 &#xff0c;關于Spring Bean如何獲??得對由Spring創建的代理的引用以處理事務&#xff0c;Spring AOP&#xff0c;緩存&#xff0c;異步流等。需要對代理的引用&#xff0c;因為如果存在對自身的調用通過代理bean&#xff0c;此調用將完全…

Array的用法總結-swift

Araay是有序的數據集&#xff0c;在OC中分為不可變數組NSArray和可變數組NSMutableArray&#xff0c;在swift中只有常量和變量兩種類型&#xff0c;聲明成變量那就可以說明是可變的了&#xff01; 學習時的具體的用法總結成如下的代碼&#xff1a; //數組var arrInts [Int]()/…

Frame URl

http://www.zi-han.net/theme/hplus/?v4.1 http://webapplayers.com/inspinia_admin-v2.5/ http://baijunyao.com/article/67 轉載于:https://www.cnblogs.com/shijiaoyun/p/6065755.html

linux的i o模型,淺談Linux 網絡 I/O 模型簡介(圖文)

1、介紹Linux 的內核將所有外部設備都看做一個文件來操作(一切皆文件)&#xff0c;對一個文件的讀寫操作會調用內核提供的系統命令&#xff0c;返回一個file descriptor(fd&#xff0c;文件描述符)。而對一個socket的讀寫也會有響應的描述符&#xff0c;稱為socket fd(socket文…

handsontable 方法匯總

核心方法1.為handsontable添加鉤子方法 addHook(key,callback):key為鉤子方法名 例如&#xff1a;hot.addHook(beforeInit, myCallback); addHookOnce(key,callback)&#xff1a;添加只使用一次的方法&#xff0c;用完后自動刪除 例如&#xff1a;hot.addHookOnce(beforeInit, …

swing中JTable的使用方法

1 public static void main(String[] args) {2 3 Student s1 new Student("張三", "001", 0);4 Student s2 new Student("李四", "002", 1);5 Student s3 new Student("王五", "003",…

android仿高德地圖透明黑字,Android 仿高德地圖可拉伸的BottomSheet

原標題&#xff1a;Android 仿高德地圖可拉伸的BottomSheet2018安卓巴士開發者大會-上海站你一直期待的安卓技術盛宴即將登場&#xff01;前言最近項目中需要用到高德地圖搜索結果后的結果展示的可拉伸控件。而我看到這個效果圖&#xff0c;覺得這個就是一個slidingpanel&#…

Java EE 7中包含哪些JSR?

我開始填寫所有應該加入Java EE 7的Java規范請求的表。 由于平臺版本仍在確定中&#xff0c;因此某些細節很難確定。 完整的Java EE 7 EJB產品具有以下標準組件和API&#xff1a; 名稱 版 描述 JSR 網頁 輪廓 批處理 1.0 批量處理 352 Bean驗證 1.1 Bean驗證框…

[ Javascript ] JavaScript中的定時器(Timer) 是怎樣工作的!

作為入門者來說。了解JavaScript中timer的工作方式是非常重要的。通常它們的表現行為并非那么地直觀&#xff0c;而這是由于它們都處在一個單一線程中。讓我們先來看一看三個用來創建以及操作timer的函數。var id setTimeout(fn, delay); - 初始化一個單一的timer&#xff0c…