有没有办法在编译时找到结构成员的偏移量?我希望创建一个包含结构成员偏移量的常量.在以下代码中,offsetof()宏在第一个printf语句中起作用.但是,在第10行中使用声明ofs会产生错误:
“Cannot resolve ‘->’ operator as a constant expression”.
这样做还有其他方法吗?
struct MyStruct { unsigned long lw; unsigned char c[5]; int i; int j; unsigned long last; }; const int ofs = offsetof(struct MyStruct,i); // This line in error int main(void) { printf("Offset of c = %d.\n",offsetof(struct MyStruct,c) ); printf("Offset of i = %d.\n",ofs ); return 0; }
解决方法
offsetof()宏是一个编译时构造.没有符合标准的方法来定义它,但每个编译器都必须有一些方法来实现它.
一个例子是:
#define offsetof( type,member ) ( (size_t) &( ( (type *) 0 )->member ) )
虽然在技术上不是编译时构造(参见用户“litb”的注释),但每个编译器必须至少有一个这样的表达式,它能够在编译时解析,这正是在<中定义的offsetof() ; STDDEF.H取代.
您的代码可能还有其他一些错误 – 缺少包含< stddef.h>或其他令您厌烦的编译器.