站內搜尋

2014/8/14

C/C++ 確認 Struct member offset 的工具

今天介紹一個小工具,對於常常需要做記憶體運算的朋友應該還算滿有用途的。
假設你常需要說計跨系統的溝通介面,在 struct 的設計上有時便免不了會碰到 Data alignment 的問題,在查問題的時候,有時會需要確認每個 Struct 中的 member 所處在的位置(offset),這時這個 macro 就滿方便的。
// Define this macro.
#define offset(A, b) (&(((A *)0)->b))
其中的 A 請帶 struct type,B 請帶你想知道位置的 member name,最後就會傳回該 member 相對於 struct 位置的 offset size。
typedef struct
{
    int16 x;
    int8 y;
    int32 z;
} A

offset(A, y);
它利用強轉的特性,去將 Address 0 轉為 type A,再指向 y 的位址,最後取址,因為相對位址是 0,取出來的自然就是 A.y 的 offset 了。

其實這是我曾經的一個老闆很愛用來考新人的考題,但,其實也是個滿方便的小工具就是了。

熱門文章