gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:33:52 25 4
gpt4 key购买 nike

关于C编程语言...

问题的一部分在 C/C++ Structure offset声明“& 并不总是指向结构第一个字段的第一个字节”

但在 http://www.lysator.liu.se/c/rat/c5.html 查看“ANSI 基本原理”它在第 3.5.2.1 节结构和 union 说明符中指出“开头可能不会出现空洞”。所以我不确定“基本原理”是否明确,但它似乎与那个非常明显的问题的那部分相矛盾。

那么,它是什么? C 结构的第一个字段总是保证偏移量为 0 吗?

struct A
{
int x;
};

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

B myB;

&myB 保证以可移植的方式与&(myB.myA)相同吗?

(更具体地说,Libev, How to pass arguments to relevant callbacks 和许多其他地方的 libev 用户数据技巧确实假定结构中的第一个字段位于 offsetof 0 处......这真的是可移植的吗?)

最佳答案

来自 C99 标准第 6.7.2.1 节第 13 点:

Within a structure object, the non-bit-field members and the units in which bit-fields reside have addresses that increase in the order in which they are declared. A pointer to a structure object, suitably converted, points to its initial member (or if that member is a bit-field, then to the unit in which it resides), and vice versa. There may be unnamed padding within a structure object, but not at its beginning.

因此,您的问题的答案是肯定的。

关于c - C 结构的第一个字段是否总是保证偏移量为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com