Typeof 的概念和用法

typeof 是C語言的新擴展的一個標識符,只有部分編譯器支持,類似於sizeof, 不過這個特性在linux內核中應用非常廣泛,對實現面向對象有非常重要的作用。


1. const typeof( ((type *)0)->member ) *__mptr = (ptr);

是定義一個__mptr指針變量,類型和member的類型一樣,typeof是獲得一個變量的類型,((type *)0)->member 則是tpye類型中的member 變量,一般type爲結構體類型,member 則爲其中的變量,這裏的0只是作爲一個臨時的指針地址用,任何可以表示地址的數字都可以代替0。


2. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

獲取TYPE類型中成員MEMBER的相對偏移量,如果基址爲0,那麼地址&((TYPE *)0)->MEMBER轉換爲size_t後就是此成員的偏移量了這裏的0作爲起始地址用,來計算偏移量,如果用其它數字代替offsetof得到的數值要減去這個數字纔是真正的偏移量,所以這裏用0是最佳的選擇

有了這些,面向對象就很容易實現了,其實const typeof( ((type *)0)->member ) *__mptr = (ptr);就類似於C++中在父類中訪問子類的成員甚至函數,即所謂的繼承和多態,這在內核中很常見。


註明:文章部分內容源自網絡,


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章