為嵌入式系統(tǒng)開(kāi)發(fā)軟件需要時(shí)間——通常比最初預(yù)期的要多。
造成這種情況的一個(gè)原因是,雖然初始編碼可能進(jìn)展迅速,但調(diào)試周期似乎是無(wú)休止的。以后,代碼的維護(hù)是不可避免的,而且需要比預(yù)期更多的時(shí)間。這是因?yàn)樵趪L試修改之前準(zhǔn)確理解代碼的功能會(huì)產(chǎn)生開(kāi)銷(xiāo)。
這一觀察的結(jié)果是,應(yīng)高度重視代碼的可讀性。易于閱讀的代碼不太可能出現(xiàn)錯(cuò)誤,因此減少了調(diào)試時(shí)間。如果代碼易于理解,則更易于維護(hù)。因此,請(qǐng)始終牢記人類(lèi)讀者——畢竟,它可能是你。(我聽(tīng)說(shuō)它建議你假設(shè)你的代碼未來(lái)的維護(hù)者是一個(gè)知道你家庭地址的精神病患者。)
代碼由兩部分組成:編譯器需要看到的東西(C 語(yǔ)句和聲明)和需要對(duì)編譯器隱藏的文本(主要是供人類(lèi)讀者使用的)。隱藏的東西主要是:
文檔——代碼中的注釋
暫時(shí)刪除的代碼——調(diào)試過(guò)程中不可避免的一部分
調(diào)試/跟蹤代碼——可以根據(jù)需要打開(kāi)和關(guān)閉
有趣的是,如果您取出純粹為人類(lèi)讀者閱讀的內(nèi)容(其中還包括使用有意義的標(biāo)識(shí)符和額外的空格,如換行符),結(jié)果是完全不可讀的代碼。一些軟件公司利用這一點(diǎn)來(lái)分發(fā)源代碼,同時(shí)保護(hù)他們的知識(shí)產(chǎn)權(quán)。
我將看看我們對(duì)編譯器隱藏的東西。
文檔
每個(gè)人都知道評(píng)論是個(gè)好主意,但我們都很懶惰。然而,這種努力是值得的。舊式/* 。.. */ C注釋還可以,但我覺(jué)得 C++ 行尾[ //。.. ]的變化更清晰。它們?nèi)匀恍枰⌒氖褂谩@纾襁@樣的代碼:
并且不要使用標(biāo)簽。它們不是便攜式的。
臨時(shí)代碼刪除
在調(diào)試和測(cè)試代碼的過(guò)程中,能夠暫時(shí)“關(guān)閉”一段代碼通常很有用。許多程序員通過(guò)將/*放在開(kāi)頭,將*/放在結(jié)尾來(lái)“注釋掉”代碼以實(shí)現(xiàn)此結(jié)果。這是快速而骯臟的,但經(jīng)常無(wú)法達(dá)到所需的結(jié)果。許多編譯器不支持嵌套注釋?zhuān)虼耍绻a已經(jīng)被注釋?zhuān)蜁?huì)出現(xiàn)問(wèn)題。總的來(lái)說(shuō),它容易出錯(cuò),應(yīng)該避免。
使用 C++ 風(fēng)格的//注釋符號(hào)——即,將//放在每行的開(kāi)頭——稍微好一點(diǎn),但應(yīng)用起來(lái)非常乏味,而且在刪除時(shí)也可能容易出錯(cuò)。
實(shí)現(xiàn)此結(jié)果的最佳方法是使用預(yù)處理器指令,因此:
在任何情況下,“關(guān)閉”的代碼序列都不應(yīng)包含在任何正在考慮發(fā)布的代碼中。
調(diào)試/跟蹤代碼
另一種臨時(shí)代碼是為了便于在調(diào)試時(shí)輸出或記錄額外信息而包含的。盡管現(xiàn)代調(diào)試器和此類(lèi)工具可能非常有效,但有時(shí)檢測(cè)代碼仍然是弄清楚到底發(fā)生了什么的最佳方式。現(xiàn)代開(kāi)發(fā)工具是如此之快,以至于重建以創(chuàng)建啟用調(diào)試的映像并不是一個(gè)嚴(yán)重的開(kāi)銷(xiāo)。
促進(jìn)這一點(diǎn)的常用方法是使用預(yù)處理器指令,因此:
因此,當(dāng)定義符號(hào)DEBUG_TRACE時(shí),將包含調(diào)試代碼。
一個(gè)稍微不同的方法是這樣編碼:
這個(gè)雙重否定看起來(lái)很笨拙,但是這個(gè)符號(hào)用于控制標(biāo)準(zhǔn)的assert()宏。程序員需要定義符號(hào)來(lái)抑制調(diào)試模式。我感謝 Michael Barr,他在嵌入式 C 編碼標(biāo)準(zhǔn)中提高了我對(duì)這種方法的認(rèn)識(shí)。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5096文章
19199瀏覽量
308220 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73923 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49329
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何提高嵌入式代碼質(zhì)量?
嵌入式工程師常用的開(kāi)發(fā)工具有哪些?
嵌入式系統(tǒng)開(kāi)發(fā)中的測(cè)試方法 嵌入式系統(tǒng)開(kāi)發(fā)與AI結(jié)合應(yīng)用
嵌入式系統(tǒng)開(kāi)發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)開(kāi)發(fā)常見(jiàn)問(wèn)題解決
嵌入式開(kāi)發(fā)常用軟件有哪些?
嵌入式linux開(kāi)發(fā)板怎么操作
嵌入式linux開(kāi)發(fā)板芯片的工作原理
恩智浦加速嵌入式AI創(chuàng)新應(yīng)用開(kāi)發(fā)
嵌入式系統(tǒng)怎么學(xué)?
如何提升嵌入式編程能力?
從事嵌入式方向,一定要軟硬件通吃?
![從事<b class='flag-5'>嵌入式</b>方向,一定要軟硬件通吃?](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
再談嵌入式實(shí)時(shí)操作系統(tǒng)
![再談<b class='flag-5'>嵌入式</b>實(shí)時(shí)操作<b class='flag-5'>系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/C8/81/wKgaomYVCTGAXoLNAAHKsmHXcPM241.png)
評(píng)論