如何计算struct的偏移量

时间:2011-09-09 08:59:33

标签: c++ c

我找到了一种计算struct偏移量的方法。如下:

#define offsetOf(type , f)  ((int)\
 ((char *)&((struct tagName*)0)->f-(char*)(struct tagName*)0)); 

但我经常这样写:

#define offsetOf(type , f)  ((int)(&((struct tagName*)0)->f); 

本书说,NULL指针的减法是为了确保当NULL指针的内部非零时它是正确的。但我认为NULL指针的内部不会影响NULL指针的地址。

3 个答案:

答案 0 :(得分:3)

为什么不使用stddef.h中定义的标准offsetof()宏?

答案 1 :(得分:3)

标准库应提供完全符合您要求的offsetof,我强烈建议您使用它,因为许多编译器会针对自定义变体所需的代码类型发出警告

无论如何,减法会将您的代码从指针域带到size_t的域。我会说这有点安全。

答案 2 :(得分:1)

永远不应该使用{p> int来保存内存地址,使用uintptr_t。或者只使用offsetof代替您自己的宏。

0永远不会被定义为0以外的东西,减去(char *)0是错误的。这是什么书?当然,您处理的地址只是虚拟地址,但您的程序永远不会看到真实的地址。

该语句可能对NULL不为0的非常模糊的系统有意义,并且在宏中用NULL替换0。当然,如果这个系统存在,很容易理解为什么它不为人所知并且可能是一个很大的失败。