国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

【單片機(jī)到嵌入式之路】序列之5:你的代碼別人有耐心看么?

發(fā)布時(shí)間:2016-2-17 08:44    發(fā)布者:designapp
關(guān)鍵詞: 單片機(jī) , 嵌入式
  本節(jié)我們將從代碼格式來審視你的代碼,主要是從下面3個(gè)方面進(jìn)行講解:
  1.代碼格式的重要性
  2.規(guī)范自己的代碼格式
  3.函數(shù)設(shè)計(jì)和變量定義格式
  一、代碼格式的重要性:
  好的代碼格式猶如男工程師看見美女,女工程師看見帥哥一樣,有種一見鐘情的感覺。但是事實(shí)上很多人不注重代碼的規(guī)范性,結(jié)果寫出來的代碼,沒有連自己都不想看第二遍,這是工程師的大忌。
  不論是硬件工程師還是軟件工程師,良好的代碼格式是基本功。如果你寫的代碼別人就看了幾行就感覺惡心、嘔吐,你說你的代碼別人還有耐心全部看完么?
  以前看見一個(gè)研究生,以為自己多牛逼,寫的代碼沒有一行注釋了。變量取名也是莫名其妙的,結(jié)果有一個(gè)bug。導(dǎo)致他檢查了半個(gè)月。何必這樣害自己呢?不要以為你寫的代碼多高級(jí),不要加注釋,不注重格式,怕別人復(fù)制。別人想復(fù)制你的代碼,說明你的代碼有價(jià)值。
  好了不多少了,直接進(jìn)入下一個(gè)小點(diǎn)吧。O(∩_∩)O~

  二、規(guī)范自己的代碼格式
  1.文件結(jié)構(gòu)
  a) 版權(quán)和版本的聲明
  這個(gè)是每個(gè)公司或者個(gè)人為了保護(hù)自己的代碼而寫的。格式也不是固定了,主要根據(jù)個(gè)人的愛好來寫的。下面貼出本人喜歡的格式。
  /*
  * Copyright (c) 2014, 鑫亮電子
  * All rights reserved.
  * 文件名稱:usart.c
  * 摘 要:串口驅(qū)動(dòng)函數(shù)
  * 硬件平臺(tái):STM32F030探索套件
  * 當(dāng)前版本:V0.0
  * 完成日期:2013-01-09
  * 修改記錄:
  */
  很簡(jiǎn)單,僅僅作為參考吧。
  b) 頭文件的結(jié)構(gòu)
  頭文件由三部分內(nèi)容組成:
  (1)頭文件開頭處的版權(quán)和版本聲明。
  (2)預(yù)處理塊。
  (3)函數(shù)和類結(jié)構(gòu)聲明等。
  下面主要看頭文件的類型,以個(gè)人平時(shí)的程序?yàn)槔?br />   /* Includes ----------------------------*/
  #ifndef __EXTI_H //防止重定義
  #define __EXTI_H
  //個(gè)人愛好
  #include "STM32F0xx.h" //包含的頭文件
  void EXTI_KEY_Init(void); //外部中斷初始化
  //個(gè)人愛好
  #endif
  c) 定義文件的結(jié)構(gòu)
  定義文件有三部分內(nèi)容:
  (1) 定義文件開頭處的版權(quán)和版本聲明。
  (2) 對(duì)一些頭文件的引用。
  (3) 程序的實(shí)現(xiàn)體(包括數(shù)據(jù)和代碼)。
  下面以常見的例子為例:
  // 全局函數(shù)的實(shí)現(xiàn)體
  void Function1(…)
  {
  …
  }
  2.程序的板式
  為了更好的講解程序的版式,下面以一個(gè)例子為例來講解:
  /***************************************
  * 函數(shù)描述:外部中斷0服務(wù)程序
  * 輸入?yún)?shù):No
  * 返 回 值:No
  * 說 明:無
  * 修改記錄:無
  ****************************************/
  void EXTI0_1_IRQHandler(void)
  {
  if(EXTI_GetITStatus(EXTI_Line0) != RESET)//判斷線0上的中斷是否發(fā)生,可以理解為標(biāo)志位
  {
  /* Toggle LED3 and LED4 */
  GPIO_WriteBit(GPIOC,GPIO_Pin_8,
  (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8))));
  GPIO_WriteBit(GPIOC, GPIO_Pin_9,
  (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9))));
  /* Clear the EXTI line 0 pending bit */
  EXTI_ClearITPendingBit(EXTI_Line0);//清除LINE0上的中斷標(biāo)志位
  }
  }
  A.注釋方式有有兩種【//】 和 【/* */】.
  B.對(duì)齊方式要注意。
  C.函數(shù)的設(shè)計(jì)也很重要。
  D.變量的定義也很關(guān)鍵。
  E.拆行也很重要,關(guān)鍵在其可讀性。
  F.必要的注釋可以讓讀者理解的更快,對(duì)自己以后維護(hù)更便捷。
  三、變量的定義和函數(shù)的設(shè)計(jì)
  1.變量的定義
  a) 見名知意
  int width; //定義寬度
  #define MAX 100; /* 最大值為100*/
  等等,上面也是兩種注釋方式。
  游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)
  2.函數(shù)的設(shè)計(jì)
  函數(shù)的設(shè)計(jì)其實(shí)很關(guān)鍵,對(duì)讀者相當(dāng)重要。一個(gè)好的函數(shù)設(shè)計(jì)可以讓讀者看出設(shè)計(jì)者別出心裁。下面簡(jiǎn)單舉幾個(gè)例子來說明:
  void Object::SetValue(int width, int height)
  {
  m_width = width;
  m_height = height;
  }
  下面再講述一下斷言的使用:
  程序一般分為Debug版本和Release版本,Debug版本用于內(nèi)部調(diào)試,Release版本發(fā)行給用戶使用。
  斷言assert是僅在Debug版本起作用的宏,它用于檢查“不應(yīng)該”發(fā)生的情況。下面例子是一個(gè)內(nèi)存復(fù)制函數(shù)。在運(yùn)行過程中,如果assert的參數(shù)為假,那么程序就會(huì)中止(一般地還會(huì)出現(xiàn)提示對(duì)話,說明在什么地方引發(fā)了assert)。
  void *memcpy(void *pvTo, const void *pvFrom, size_t size)
  {
  assert((pvTo != NULL) && (pvFrom != NULL)); // 使用斷言
  byte *pbTo = (byte *) pvTo; // 防止改變pvTo的地址
  byte *pbFrom = (byte *) pvFrom; // 防止改變pvFrom的地址
  while(size -- > 0 )
  *pbTo ++ = *pbFrom ++ ;
  return pvTo;
  }
  assert不是一個(gè)倉促拼湊起來的宏。為了不在程序的Debug版本和Release版本引起差別,assert不應(yīng)該產(chǎn)生任何副作用。所以assert不是函數(shù),而是宏。程序員可以把a(bǔ)ssert看成一個(gè)在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測(cè)試手段。如果程序在assert處終止了,并不是說含有該assert的函數(shù)有錯(cuò)誤,而是調(diào)用者出了差錯(cuò),assert可以幫助我們找到發(fā)生錯(cuò)誤的原因。
  很少有比跟蹤到程序的斷言,卻不知道該斷言的作用更讓人沮喪的事了。你化了很多時(shí)間,不是為了排除錯(cuò)誤,而只是為了弄清楚這個(gè)錯(cuò)誤到底是什么。有的時(shí)候,程序員偶爾還會(huì)設(shè)計(jì)出有錯(cuò)誤的斷言。所以如果搞不清楚斷言檢查的是什么,就很難判斷錯(cuò)誤是出現(xiàn)在程序中,還是出現(xiàn)在斷言中。幸運(yùn)的是這個(gè)問題很好解決,只要加上清晰的注釋即可。這本是顯而易見的事情,可是很少有程序員這樣做。這好比一個(gè)人在森林里,看到樹上釘著一塊“危險(xiǎn)”的大牌子。但危險(xiǎn)到底是什么?樹要倒?有廢井?有野獸?除非告訴人們“危險(xiǎn)”是什么,否則這個(gè)警告牌難以起到積極有效的作用。難以理解的斷言常常被程序員忽略,甚至被刪除。
  【注意】:
  A.使用斷言捕捉不應(yīng)該發(fā)生的非法情況。不要混淆非法情況與錯(cuò)誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。
  B.在函數(shù)的入口處,使用斷言檢查參數(shù)的有效性(合法性)。
  C.在編寫函數(shù)時(shí),要進(jìn)行反復(fù)的考查,并且自問:“我打算做哪些假定?”一旦確定了的假定,就要使用斷言對(duì)假定進(jìn)行檢查。
  D.一般教科書都鼓勵(lì)程序員們進(jìn)行防錯(cuò)設(shè)計(jì),但要記住這種編程風(fēng)格可能會(huì)隱瞞錯(cuò)誤。當(dāng)進(jìn)行防錯(cuò)設(shè)計(jì)時(shí),如果“不可能發(fā)生”的事情的確發(fā)生了,則要使用斷言進(jìn)行報(bào)警。
  以上內(nèi)容參考了林銳博士的【C/C++ 代碼規(guī)范參考】一書。
  對(duì)于代碼對(duì)齊 和 一些其它的內(nèi)容,我希望大家可以多閱讀別人的代碼,多練習(xí),只有多練習(xí)了才能掌握于心,才能運(yùn)用自如。
  以上的內(nèi)容大家可以作為參考,就作為拋磚引玉吧,希望大家能提出更好的方法,共同提高才是王道!!!
                               
               
本文地址:http://m.qingdxww.cn/thread-160814-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99视频免费播放 | 欧乱色国产精品兔费视频 | 国产色婷婷精品综合在线 | 非洲黑人毛片 | 国产美女精品 | 91香蕉影视 | 国产日韩欧美在线播放 | 国产对白91色拍高清精品 | 国产一区二区三区视频在线观看 | 久久996国产精品免费 | 日韩欧美在线看 | 亚洲网站视频在线观看 | 免费观看色视频 | 四虎在线视频 | 麻豆精品91 | 日韩色吧| 久久中文字幕亚洲精品最新 | 亚洲综合网在线 | 噜噜狠狠 | 成品人app软件大全免费下载 | 九九精品久久久久久噜噜 | 香蕉依依精品视频在线播放 | 日韩一级大片 | 国产福利小视频在线播放观看 | 亚洲一区二区三区播放在线 | 日本在线免费看 | 日韩免费精品视频 | a在线观看免费网址大全 | 在线免费观看日韩视频 | 天天操夜夜操视频 | 国产一区二区三区在线 | 日本欧美一区二区三区 | 久久夫妻| ww亚洲ww在线观看国产 | 国产免费久久精品 | 国产成人亚洲精品乱码在线观看 | 久久香蕉国产线看精品 | 国产精品亚洲精品影院 | 亚洲麻豆国产精品 | 欧美色精品天天在线观看视频 | 亚洲视频一区在线 |