#define CR (Record, TYPE, Field) \
((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
Record - Struct成員的記憶體位址
TYPE - Struct所宣告的型態
Field - Struct成員使用的名稱
CR拆解
1. &(((TYPE *) 0)->Field)
取得Struct成員在Struct中的offset
2. (CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)
用Struct成員的實際記憶體位址減去Offset,就可得到Struct的記憶體位址
3. (TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field))
再轉型回Struct的宣告型態
沒有留言:
張貼留言