看代码的时候, 看到一段这样的:
( (size_t)& ((void *)0)->member )
请问这个0是什么意思, 用在这里, 代表什么??? 这条语句有什么作用.
这样防止编译器产生不必要的检测。说白了,就是表示一个抽象的指针。 此处是指针数值的计算问题。因为member的成员变量的地址和整体结构对象的地址存在差值,自然可以通过一个存在0地址的整体结构的成员变量的地址,得到成员变量在结构中的偏移量。此处并不去纠结具体的指针类型。这样写的好处是这个宏的通用性强,只要某个结构中有这个成员变量。 (这里的描述不全面啊。void 不能直接获取结构指针的成员变量,这里还是需要转为具体结构的指针类型,哈,补充描述一下)哈。如果你要觉得不放心,完全可以在宏中代入一个类型T, 用 T完成 void *的工作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。