offsetof是否需要指针取消引用?

时间:2018-07-26 16:50:05

标签: c++ c macros undefined-behavior offsetof

我想知道一个简单的宏offset_of_是否需要不进行指针取消引用。例如,使用打包属性声明的C++(表示此代码将使用C ++编译器编译)结构

struct A {
  int x;
  int y;
} __attribute__(packed);

假设在这种情况下,sizeof(int) == 4为了计算yA的偏移量,我编写了一个简单的宏:

#define offset_of_y (ptrdiff_t)(&(((A*)0)->y))

我们可以确定该宏的值始终为4吗?调用宏时,是否从0(可能是UB)取消指针的引用?

非常感谢您的答复。

1 个答案:

答案 0 :(得分:3)

通过空指针访问内容是UB,句点。

(除非上下文未被评估,但在这种情况下,它被评估。)

您可能想要offsetof()


实际上,您的代码可能可以正常工作,但实际上它是未定义的。