在文章最后提到之前的隱藏結(jié)構(gòu)體成員的方法是一種完全私有的封裝無法做到"公私分明",這樣通過函數(shù)調(diào)用在MCU中會存在較大的開銷。
1、原理與技巧
那時候bug菌就在想有什么辦法可以做到私有成員與公共成員區(qū)別對待呢?
既然.h文件中的不完全類型僅僅只是一個啥也不含的結(jié)構(gòu)體空殼,那么根據(jù)結(jié)構(gòu)體的內(nèi)存模型以及我們平時經(jīng)常提到的C語言面向?qū)ο笤O(shè)計中的繼承處理。
于是便編寫了如下代碼來驗證我的想法:
參考代碼:
輸出結(jié)果:
從輸出結(jié)果上來看編譯正常,且輸出了正確的結(jié)果,member1可被外界直接訪問,而member2只能通過App.c內(nèi)部直接訪問,或者通過定義外部函數(shù)接口進行間接訪問,否則就會報錯。一頓猛如虎的操作竟然驗證了自己的一些想法。
2、優(yōu)化版本
后來又想了想,如果成員比較多,不是特別好管理,于是嘗試了一個更好的成員管理方式:
參考代碼:
輸出結(jié)果:
編譯OK,完工,是不是感覺有一股C++的味道了,如果你還沒有看懂的話,記得多看幾遍,因為這種處理方式算是非常常見的~
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
146文章
17984瀏覽量
367067 -
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153768 -
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141784
發(fā)布評論請先 登錄
定義IO初始化結(jié)構(gòu)體
滲壓計在混凝土結(jié)構(gòu)體中的安裝指南

GLAD應(yīng)用:體全息光柵模擬
程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)
C語言中結(jié)構(gòu)體與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場景
DLPC3439和DLPC3479具體有哪些差異呢?搭配DLP芯片怎么配對呢?
私有云和公有云有什么區(qū)別
結(jié)構(gòu)體成員的順序會影響結(jié)構(gòu)體的大小嗎
公有IP與私有IP之間的區(qū)別
typedef和struct有啥區(qū)別
typedef struct和直接struct的區(qū)別
帶你認(rèn)識貼片一體成型電感的材料結(jié)構(gòu)

評論