offsetof宏和container_of宏
生活随笔
收集整理的這篇文章主要介紹了
offsetof宏和container_of宏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 offsetof宏
- 1.1 宏的作用
- 1.2 編譯器做了什么
- 2 container_of宏
- 2.1 ({})是什么?
- 2.2 typeof
- 2.3 原理分析
1 offsetof宏
1.1 宏的作用
offsetof用于計算TYPE結構體中MEMBER成員的偏移位置。
1.2 編譯器做了什么
注意: 在操作系統的環境下,讀和寫0地址的內容都是非法的,會導致程序異常停止。
對于編譯器來說,它清楚的知道結構體成員變量的偏移地址,它通過結構體變量首地址與偏移量來定位成員變量。所以對于offsetof宏來說編譯器并不會去讀寫0地址,而是直接計算得到成員的地址,所以直接使用0地址不會導致程序崩潰。
2 container_of宏
2.1 ({})是什么?
({})是GNU C編譯器的擴展語法,與逗號表達式類似,結果為最后一個語句的值。
2.2 typeof
typeof是GUN C編譯器特有的關鍵字,只在編譯期有效,用于得到變量的類型。
2.3 原理分析
我們可以分析出container_of宏的作用就是根據結構體成員的地址得到結構體的首地址。
注意: container_of使用({})進行安全類型的檢查,這里設計的非常精妙。宏的第一句并不是無用的,而是用來進行類型檢查的。
總結
以上是生活随笔為你收集整理的offsetof宏和container_of宏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFMpeg的基本用法
- 下一篇: 95511信用卡怎么转人工 电话设有三个