可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm looking for a piece of code that can tell me the offset of a field within a structure without allocating an instance of the structure.
IE: given
struct mstct { int myfield; int myfield2; };
I could write:
mstct thing; printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing));
And get "offset 4" for the output. How can I do it without that "mstct thing" declaration/allocating one?
I know that & does not always point at the first byte of the first field of the structure, I can account for that later.
回答1:
How about the standard offsetof() macro (in stddef.h)?
Edit: for people who might not have the offsetof() macro available for some reason, you can get the effect using something like:
#define OFFSETOF(type, field) ((unsigned long) &(((type *) 0)->field))
回答2:
Right, use the offsetof macro, which (at least with GNU CC) is available to both C and C++ code:
offsetof(struct mstct, myfield2)
回答3:
printf("offset: %d\n", &((mstct*)0)->myfield2);