分析**節選自muduo.
以下**通過offsetof獲取sin_family在sockaddr_in6中的字段偏移量.
static_assert(offsetof(sockaddr_in6, sin6_family) == 0, "需要注意:sin6_family offset 0
");
offsetof並非c/c++標準,需要編譯器內建支援.
以及針對的資料型別,盡量使pod型別資料(可參考下面鏈結中的提示).
具體詳情可參考:
補充:檢查sin_family6欄位時發現其是通過巨集拼接而成,頗為有趣,**如下所示:
1ps:如果您覺得我的文章對您有幫助,可以掃碼領取下紅包,謝謝!//拼接巨集
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 */
結構體成員變數偏移量
我們先來定義一下需求 已知結構體型別定義如下 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...