linux内核中有个宏container_of,可以由struct的某个成员地址获取struct的起始地址,该宏移到vc下之后编译出错。原来gcc支持typeof关键字,msvc不支持。参考网友代码,修改如下:
#define container_of(ptr, type, member) ((type *)(((char *)ptr) - (int)(&(((type*)0)->member))))
测试代码
struct test_data
{
int a;
int b;
};
int _tmain(int argc, _TCHAR* argv[])
{
test_data td;
td.a = 100;
td.b = 200;
void *pb1 = &td.b;
test_data * pb = NULL;
printf("offset b = %d\n", &pb->b);
test_data *p = container_of(pb1, test_data, b);
printf("a = %d, b = %d\n", p->a, p->b);
}
输出