国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

有什么辦法可以做到私有結構體成員與公共結構體成員區別對待呢?

冬至配餃子 ? 來源:最后一個bug ? 作者:bug菌 ? 2022-08-11 14:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在文章最后提到之前的隱藏結構體成員的方法是一種完全私有的封裝無法做到"公私分明",這樣通過函數調用在MCU中會存在較大的開銷。

1、原理與技巧

那時候bug菌就在想有什么辦法可以做到私有成員與公共成員區別對待呢?

既然.h文件中的不完全類型僅僅只是一個啥也不含的結構體空殼,那么根據結構體的內存模型以及我們平時經常提到的C語言面向對象設計中的繼承處理。

于是便編寫了如下代碼來驗證我的想法:

參考代碼:

poYBAGL0o9aAbQLGAAD9hCfZ5sI916.pngpoYBAGL0o92AOVYBAAB0SK8WK5A993.pngpYYBAGL0o_WASNMLAACXtOsYS8w370.png

輸出結果:

poYBAGL0o_yAJFQoAABWl3kCgcw166.png

從輸出結果上來看編譯正常,且輸出了正確的結果,member1可被外界直接訪問,而member2只能通過App.c內部直接訪問,或者通過定義外部函數接口進行間接訪問,否則就會報錯。一頓猛如虎的操作竟然驗證了自己的一些想法。

2、優化版本

后來又想了想,如果成員比較多,不是特別好管理,于是嘗試了一個更好的成員管理方式:

參考代碼:

pYYBAGL0pDCALpEpAAC8H4wIN5o435.pngpoYBAGL0pDWARE0QAAD8jASol1E098.pngpoYBAGL0pDyAW16gAACq0UJ90uU981.pngpYYBAGL0pEOAAkJZAAD-dlmim7M607.png

輸出結果:

pYYBAGL0pFyAT6D8AABXBO7RPHI405.png

編譯OK,完工,是不是感覺有一股C++的味道了,如果你還沒有看懂的話,記得多看幾遍,因為這種處理方式算是非常常見的~



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18925

    瀏覽量

    398214
  • 接口
    +關注

    關注

    33

    文章

    9521

    瀏覽量

    157036
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145599
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙智能上/下架、升級流程介紹

    執行上架操作,并且已經審核通過的智能,才能被其他用戶搜索并使用。 升級審核未通過的智能,線上依舊保留上一次通過審核的智能版本提供給其他用戶使用。 下架后的智能,用戶無法再使用。
    發表于 02-10 10:38

    請問如何從一個函數內部判斷本函數是否是個成員函數還是個非成員函數?

    如何從一個函數內部判斷本函數是否是個成員函數還是個非成員函數?
    發表于 01-06 06:30

    10個例子代碼,C語言結構的高級

    當涉及到C語言結構的高級**時,很多有趣和強大的技巧可以應用。下面是10個例子代碼,每個例子都使用了不同的高級結構
    發表于 01-05 06:32

    一個經典的結構和聯合體共用的實例

    Linux 中可以 使用 sizeof 進行獲取,默認為字節對齊的大小。 聯合體 聯合體的參數共享同一個內存地址,所占的內存大小完全是由聯合體中參數類型決定字長,然后數據共享,內存共享等。 結構和聯合體
    發表于 12-16 07:14

    結構聲明與定義

    1、聲明 結構的聲明使用struct關鍵字,如果我們想要把我們的學籍信息組織一下的話,可以這樣表示: struct Info { unsigned long identifier;//學號
    發表于 12-11 07:52

    typedef結構使用

    雖然結構的出現能夠讓我們一個更科學的數據結構來管理數據,但是每次使用結構都需要struct
    發表于 12-08 07:04

    共用聲明

    共用也稱聯合體。 和結構還是有點像: union 共用名稱 { 成員1; 成員2
    發表于 12-05 07:24

    為什么不建議用匿名結構

    : invalid use of ‘struct data_def::::value_bit’ 可能有方法可以設置 gcc 編譯支持匿名結構,但是魚鷹也不想深究,改了就是。 因此
    發表于 12-04 07:39

    C語言的編程技巧

    1、宏定義使用do{...}while(0)?:當宏定義中包含多條語句時,使用do{...}while(0)可以避免語句嵌套問題,確保宏的獨立性。? ?2、靈活數組成員?:C99標準允許結構
    發表于 11-27 06:46

    C語言結構使用

    有時候需要將不同類型的數據組合為一個整體,以便于引用。例如,一名學生學號、姓名、性別、年齡等屬性,如果針對每個屬性都單獨定義一個變量,那么當多名學生時變量就難以分清。結構就是用來
    發表于 11-12 08:30

    can_sample例程,rxmsg.hdr = -1;語句報錯如何解決?

    使用官方CAN_sample例程編譯,cubemx已經配置好CAN引腳,menuconfig也已經打開相關接口,但編譯時報錯,顯示結構 rt_can_msg結構中沒有hdr這個
    發表于 09-24 07:05

    定義IO初始化結構

    由上述IOPORT相關功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據情況配置它們。因此我們定義一個IOPORT初始化的結構類型IOPORT_Init_t,它的成員
    的頭像 發表于 07-16 16:26 ?1410次閱讀

    滲壓計在混凝土結構中的安裝指南

    用于測量土體中的孔隙水壓力、巖和混凝土內的滲透水壓力。在混凝土結構中埋設滲壓計,可以實時監測結構內部的水壓力變化,為工程安全評估和維護提
    的頭像 發表于 05-28 10:55 ?599次閱讀
    滲壓計在混凝土<b class='flag-5'>結構</b><b class='flag-5'>體</b>中的安裝指南

    GLAD應用:全息光柵模擬

    用于模擬全息記錄介質中形成的梯度折射率分布。全息結構一旦形成,就可以在傳輸過程中將一束入射光波逐漸轉換成形成體全息結構的另一束光波。兩束光波之間的能量傳遞轉換效率與
    發表于 05-15 09:32

    C語言中結構與聯合體的深度解析:內存布局與應用場景

    一、基礎概念與核心差異 1.1 結構(Struct)的本質 **結構是C語言中實現數據封裝的基石,其核心特征在于內存獨立性。每個成員變量
    發表于 04-08 09:18