如果你是C開發人員請看這三個顯式程式設計技巧
導讀 | 嵌入式系統開發人員應儘可能明確,以避免 ASSUME 綜合症並在其系統中產生意外行為。在今天的文章中,讓我們來看看嵌入式開發人員可以通過更明確的方式清理程式碼的幾個領域。 |
嵌入式系統開發人員應儘可能明確,以避免 ASSUME 綜合症並在其系統中產生意外行為。在今天的文章中,讓我們來看看嵌入式開發人員可以通過更明確的方式清理程式碼的幾個領域。
我們都知道我們不應該使用 extern,因為它會建立全域性變數,進而可能導致各種問題。但是,實際使用 extern 的一個好地方是在建立公共函式時。
當你定義一個公開的函式時,你可以使用以下 在標頭中建立宣告或原型:
void Foo(void);
它在標題中,所以很明顯它是一個公共的外部函式。但是,我遇到過這樣的情況,你正在維護一個別人編寫的模組,並且在像 Bar 這樣的函式的標頭中沒有公共 API,但它的定義如下:
void Bar(void) { … }
這個函式的目的是什麼? 它應該是私有的並且前面有一個靜電嗎?它應該是公開的並在標題中定義嗎?如果嵌入式開發人員將 Bar 定義為:
extern Bar(void) { … }
我們會知道它是公開的並且在 API 中缺失,儘管有人呼叫它,連結器仍然能夠找到它。
指標是危險的,如果它們在執行過程中意外地以某種意想不到的方式遞增、遞減或修改,它們很容易導致災難。我經常會遇到如下所示的函式宣告:
void Foo(uint32_t * Param1);
這個宣告是如此含蓄,我讀了這個宣告,其目的是將一個指標傳遞給一個 uint32_t,其中指標和指向的 uint32_t 記憶體位置都允許更改!
這是嵌入式開發人員的本意嗎? 如果他們只是想傳遞一個指向變數的指標,以便它通過引用傳遞並且可以被函式修改怎麼辦? 這個函式可以做到這一點,但他們也開啟了修改指標的選項!
下面的陳述對我來說非常清楚,指標不會改變,指向的值可以改變:
void Foo(uint32_t * const Param1);
引數是指向 uint32_t 記憶體位置的 const 指標。指標在函式中不能改變,但指向的東西可以。因此,如果有人在函式中執行以下操作:
Param++;
編譯器會說“不! 錯誤!”,讓維護者明白他們不應該這樣做。
現在,這通常會讓嵌入式開發人員興奮不已,而且不是很好。有人告訴我這是無稽之談,但同樣,它使包括新手在內的任何開發人員都清楚程式碼。
這裡的想法是我可能有一個宣告如下的函式:
void Foo(uint32_t Param1);
在這種情況下,我通過副本而不是引用傳遞引數,以供函式使用。該函式理論上可以對本地副本執行任何操作。但同樣,如果有人在維護這段程式碼,他們是否知道我們想要接收引數並將其用作常量? 對我來說,除非宣告是這樣寫的,否則我不會有任何線索:
void Foo(const uint32_t Param1);
這告訴我,該引數預計不會在副本中更改或修改以供本地使用。
這些提示有助於使程式碼更清晰,並有助於嵌入式開發人員理解程式碼的真正意圖。現在,這些可能不是導致所有這些損失的隱式程式碼的最佳做法,但它們確實讓你認為你應該編寫儘可能清晰的軟體。
原文來自: https://www.linuxprobe.com/three-explicit-programming-skills-c-development.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2855689/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python的22個程式設計技巧,請收下!Python程式設計
- 面試官問:如果讓你寫一個配置中心,說說你的設計思路? 不要慌,看這個!面試
- 學併發程式設計,透徹理解這三個核心是關鍵程式設計
- 如果你是老闆,你會不會踢了這樣的員工?
- 一個SAP開發人員的年終總結:程式設計與游泳程式設計
- Java開發人員在程式設計中常見的雷!Java程式設計
- 改進你的c#程式碼的5個技巧(三)C#
- 別人再問你設計模式,叫他看這篇文章設計模式
- Java開發人員的反應程式設計介紹 - Fernando AlmeidaJava程式設計NaN
- [譯] 優秀 JavaScript 開發人員應掌握的 9 個技巧JavaScript
- 併發程式設計之顯式鎖原理程式設計
- 如果孔子是個程式設計師,一定是P14程式設計師
- 程式設計師,職場上請遠離這種人!程式設計師
- 作為程式設計師,無論你在哪個階段,這些書都值得你看程式設計師
- 【高併發】學好併發程式設計,關鍵是要理解這三個核心問題程式設計
- Rust for C#/.NET 開發人員RustC#
- [程式設計] 你真的會寫函式註釋?這裡給你一個答案程式設計函式
- linux嵌入式程式設計開發必備知識,這些你都要知道Linux程式設計
- 一些Java開發人員在程式設計中常見的雷!Java程式設計
- 隨著低程式碼的發展,程式設計不再僅適用於開發人員。程式設計
- [趣圖]程式設計社群調查顯示,Java程式設計師最苦逼,C++程式設計師最年老,是這樣的麼?Java程式設計師C++
- 《JAVA併發程式設計實戰》顯式鎖Java程式設計
- 如果你在用flutter,千萬要記得這幾個小技巧,非常實用Flutter
- 如果你朋友不知道什麼是雲端計算,請把這篇文章轉給TA
- 初學程式設計所看的書籍(個人版)程式設計
- 速看!程式設計師巧談薪資的六個小技巧!程式設計師
- 如果同事程式設計能力比你低,你是如何與他合作的?反之呢?程式設計
- 程式設計師有話說:開發人員提升自己的四種方式程式設計師
- 什麼是Web開發?如何成為一個Python Web開發人員?WebPython
- 請用一句話證明你是程式設計師程式設計師
- C++如何開啟“開發人員命令提示”C++
- 現在的你,是開發工程師、程式設計師還是碼農?工程師程式設計師
- 程式設計師,請你不要在坑程式設計師了?程式設計師
- 給你安利一個程式設計師上岸公務員的開源專案程式設計師
- 作為開發人員,這四類Code Review方法你都知道嗎?View
- C# 管道式程式設計C#程式設計
- 18個Python高效程式設計技巧!Python程式設計
- 2019年成為優秀的Java開發人員的10個技巧Java