在文章最后提到之前的隱藏結(jié)構(gòu)體成員的方法是一種完全私有的封裝無法做到"公私分明",這樣通過函數(shù)調(diào)用在MCU中會(huì)存在較大的開銷。
1、原理與技巧
那時(shí)候bug菌就在想有什么辦法可以做到私有成員與公共成員區(qū)別對(duì)待呢?
既然.h文件中的不完全類型僅僅只是一個(gè)啥也不含的結(jié)構(gòu)體空殼,那么根據(jù)結(jié)構(gòu)體的內(nèi)存模型以及我們平時(shí)經(jīng)常提到的C語言面向?qū)ο笤O(shè)計(jì)中的繼承處理。
于是便編寫了如下代碼來驗(yàn)證我的想法:
參考代碼:



輸出結(jié)果:

從輸出結(jié)果上來看編譯正常,且輸出了正確的結(jié)果,member1可被外界直接訪問,而member2只能通過App.c內(nèi)部直接訪問,或者通過定義外部函數(shù)接口進(jìn)行間接訪問,否則就會(huì)報(bào)錯(cuò)。一頓猛如虎的操作竟然驗(yàn)證了自己的一些想法。
2、優(yōu)化版本
后來又想了想,如果成員比較多,不是特別好管理,于是嘗試了一個(gè)更好的成員管理方式:
參考代碼:




輸出結(jié)果:

編譯OK,完工,是不是感覺有一股C++的味道了,如果你還沒有看懂的話,記得多看幾遍,因?yàn)檫@種處理方式算是非常常見的~
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
147文章
18925瀏覽量
398276 -
接口
+關(guān)注
關(guān)注
33文章
9521瀏覽量
157048 -
C語言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145607
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙智能體上/下架、升級(jí)流程介紹
請(qǐng)問如何從一個(gè)函數(shù)內(nèi)部判斷本函數(shù)是否是個(gè)成員函數(shù)還是個(gè)非成員函數(shù)?
10個(gè)例子代碼,C語言結(jié)構(gòu)體的高級(jí)
一個(gè)經(jīng)典的結(jié)構(gòu)體和聯(lián)合體共用的實(shí)例
結(jié)構(gòu)體聲明與定義
typedef結(jié)構(gòu)體使用
為什么不建議用匿名結(jié)構(gòu)體
C語言的編程技巧
C語言結(jié)構(gòu)體使用
can_sample例程,rxmsg.hdr = -1;語句報(bào)錯(cuò)如何解決?
定義IO初始化結(jié)構(gòu)體
滲壓計(jì)在混凝土結(jié)構(gòu)體中的安裝指南
有什么辦法可以做到私有結(jié)構(gòu)體成員與公共結(jié)構(gòu)體成員區(qū)別對(duì)待呢?
評(píng)論