C C 結構體成員偏移量獲取

2022-01-15 11:10:32 字數 739 閱讀 7226

分析**節選自muduo.

以下**通過offsetof獲取sin_family在sockaddr_in6中的字段偏移量.

static_assert(offsetof(sockaddr_in6, sin6_family) == 0, "

sin6_family offset 0

");

需要注意:

offsetof並非c/c++標準,需要編譯器內建支援.

以及針對的資料型別,盡量使pod型別資料(可參考下面鏈結中的提示).

具體詳情可參考:

補充:檢查sin_family6欄位時發現其是通過巨集拼接而成,頗為有趣,**如下所示:

1

//拼接巨集

2#define __sockaddr_common(sa_prefix) \

3sa_family_t sa_prefix##family45

//結構體定義

6#if !__use_kernel_ipv6_defs7/*

ditto, for ipv6. */8

struct

sockaddr_in69;

16#endif /* !__use_kernel_ipv6_defs */

ps:如果您覺得我的文章對您有幫助,可以掃碼領取下紅包,謝謝!

結構體成員變數偏移量

我們先來定義一下需求 已知結構體型別定義如下 struct node t 且結構體1byte對齊 pragma pack 1 求 結構體struct node t中成員變數c的偏移。注 這裡的偏移量指的是相對於結構體起始位置的偏移量。有三種方法 1.使用巨集offsetof 2.定義乙個結構體,用結...

計算結構體偏移量

如果能夠讓 unsigned long type 的值為0,即 type 0的時候,那麼offset的值就是簡單的 offset unsigned long type.c 如果說 type 0,那麼type.c就可以等價於 type t 0 c。但是這個語句是不能單獨存在的,因為對null指標訪問成...

結構體成員的偏移量與offsetof函式

1.一旦結構體定義下來,則結構體中的成員記憶體布局就定下了。typedef struct test testmem void test 2.offsetof函式 巨集函式offset,用於求結構體中的乙個成員,在結構體中的偏移量 在stddef.h 標頭檔案中,該巨集的完整說明如下 ifdef cp...