abc::c’ of null...gcc warning: invalid access to...
时间:2010-08-15 来源:ronilee
今天在使用offsetof函数的时候碰到了一个警告,警告如标题所示。
先看代码
class abc
{
public:
void foo()
{
}
abc()
{
}
~abc()
{
}
public:
char a;
int b;
int c;
}__attribute__((__packed__));
int main(int argc, char *argv[])
{
unsigned long n = (unsigned long)offsetof(abc, c);
return 0;
}
在main函数中的第一行代码出现了如题所示的警告。
把main函数修改如下
int main(int argc, char *argv[])
{
unsigned long n = (unsigned long)&(((abc *)(&0))->c);
return 0;
}
结果还是在main函数中的第一行代码出现了如题所示的警告。可能gcc也是这么实现offsetof的吧。
最后,为了把警告去掉,把main函数修改成了这样
int main(int argc, char *argv[])
{
unsigned long n = (unsigned long)&(((abc *)(&1))->c) - 1;
return 0;
}
感觉有点傻,但是暂时找不到去掉这个警告的办法,先将就了。还望高人指点。