This question already has answers here:
Closed 5 years ago.
Why does this implementation of offsetof() work?
(7个答案)
我继承了很多代码,在这个扩展过程中遇到了困难。我明白它是怎么做的,我不明白它是怎么做的。
#define OFFSETOF(structure, item)     ((u16)&(((structure*)0)->item))

更具体地说,除了这一部分,我得到了大部分。我不知道零号在做什么,也不知道它在那里干什么。
如果需要知道,“structure”只是一个((structure*)0),item是
 struct{
    u32 my_example_item;
}

再一次,零让我感到困惑。

最佳答案

structure是一种类型
(structure*)是指针
(structure*)0structure*类型的空指针
->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