This question already has answers here:
Closed 5 years ago.
Why does this implementation of offsetof() work?
(7个答案)
我继承了很多代码,在这个扩展过程中遇到了困难。我明白它是怎么做的,我不明白它是怎么做的。
更具体地说,除了这一部分,我得到了大部分。我不知道零号在做什么,也不知道它在那里干什么。
如果需要知道,“structure”只是一个
再一次,零让我感到困惑。
(7个答案)
我继承了很多代码,在这个扩展过程中遇到了困难。我明白它是怎么做的,我不明白它是怎么做的。
#define OFFSETOF(structure, item) ((u16)&(((structure*)0)->item))
更具体地说,除了这一部分,我得到了大部分。我不知道零号在做什么,也不知道它在那里干什么。
如果需要知道,“structure”只是一个
((structure*)0)
,item是 struct{
u32 my_example_item;
}
再一次,零让我感到困惑。
最佳答案
structure
是一种类型(structure*)
是指针(structure*)0
是structure*
类型的空指针->item
获取指向的对象的成员item
假装记忆中的0位置有一个(((structure*)0)->item)
,并引用它的项。structure
获取该项的地址,该地址将等于对象中&(((structure*)0)->item)
的偏移量。此地址的类型是item
(因为u32*
是item
)u32
将该地址转换为((u16)&(((structure*)0)->item))
,因此它是正确的偏移类型。
关于c - C宏扩展说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24211696/
10-10 21:16