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

标签 c++ c macros undefined-behavior offsetof

我想知道一个简单的宏 offset_of_ 是否需要对 not 的指针取消引用。例如,一个 C++(意味着这段代码将使用 C++ 编译器编译)结构,它声明了 packed 属性

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

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

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

我们能确定这个宏的值总是4吗?调用宏时是否有任何指针从 0(可能是 UB)取消引用?

非常感谢您的回复。

最佳答案

通过空指针访问某些东西是 UB,句点。

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

你可能想要 offsetof() .


在实践中你的代码可能可以工作,但正式它是未定义的。

关于c++ - offsetof 是否需要指针取消引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51543898/

相关文章:

c++ - 如何在标准 C++ 字符串中使用 3 和 4 字节的 Unicode 字符?

c - 将 ESCAPE 键传递到 C Windows 控制台中的 stdin 缓冲区时出现问题

phpstorm 中的宏

c - 对文件使用 fscan() 时,如何对文件内的值执行某些操作?

c - 我怎样才能阻塞线程直到找到素数,解除阻塞,然后让它们等到下一个素数?

c - 如何获取多行宏调用的宏名称 __LINE__?

c - 区分#define宏中的变量和常量

c++ - 在 SAFEARRAY 中访问 BSTR

c++ - 没有目标函数的进化算法

java - C++/ java : Efficiently find a set in the collection containing given value