C / C ++结构偏移量

我正在寻找一段代码,可以告诉我一个结构中的字段的偏移量,而不分配结构的一个实例。

IE:给

struct mstct { int myfield; int myfield2; }; 

我可以写:

 mstct thing; printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing)); 

得到“偏移4”的输出。 我怎样才能做到这一点,没有“mstct事”声明/分配一个?

我知道&<struct>并不总是指向结构的第一个字段的第一个字节,我可以在后面说明。

标准offsetof()macros(在stddef.h中)如何?

编辑:对于可能由于某种原因而没有使用offsetof()macros的人,可以使用如下所示的效果:

 #define OFFSETOF(type, field) ((unsigned long) &(((type *) 0)->field)) 

正确的,使用offsetofmacros(至less在GNU CC中)可用于C和C ++代码:

 offsetof(struct mstct, myfield2) 

printf(“offset:%d \ n”,&((mstct *)0) – > myfield2);