C结构的第一个字段是否总是保证偏移量为0?

s6fujrry  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(182)

关于C语言编程…
C/C++ Structure offset的部分问题指出“&并不总是指向结构的第一个字段的第一个字节”
但是在http://www.lysator.liu.se/c/rat/c5.html的“ANSI基本原理”中,它在www.example.com结构和联合说明符一节中指出“开头可能不会出现漏洞”3.5.2.1。所以我不确定“基本原理”是否是明确的,但它似乎与那个高度可见的问题的那部分相矛盾。
那么,它是什么呢?* C结构的第一个字段总是保证偏移量为0吗?*

struct A
{
    int x;
};

struct B
{
    struct A myA;
    int y;
};

B myB;

&myB * 保证 * 在可移植的方式下与&(myB.myA)相同吗?
(More具体地说,libev在Libev, How to pass arguments to relevant callbacks和许多其他地方的用户数据技巧确实假设结构中的第一个字段的偏移量为0...这真的是可移植的吗?)

g52tjvyc

g52tjvyc1#

来自C99标准部分6.7.2.1要点13:
在一个结构对象中,非位域成员和位域所在的单元的地址按它们被声明的顺序递增。指向一个结构对象的指针,经过适当的转换,指向它的初始成员(或者,如果该成员是位字段,则将其分配给它所驻留的单元),反之亦然。但不是在开始的时候。
所以你的问题的答案是肯定的。

相关问题