有没有办法在编译时找到结构成员的偏移量?我希望创建一个包含结构成员偏移量的常量.在以下代码中,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>或其他令您厌烦的编译器.