gpt4 book ai didi

c - 结构中的填充总是相同吗?

转载 作者:行者123 更新时间:2023-11-30 16:56:16 24 4
gpt4 key购买 nike

  1. 结构体的元素必须正确对齐,以便结构体可以用未使用的字节填充。
  2. 结构体的大小始终相同(因为它是常量表达式)。

所以我认为编译器必须每次都使用相同的填充,例如:

  • 放置单个结构体实例
  • 按值将结构体实例传递给函数
  • 从函数中按值返回结构体实例
  • 在结构数组中

如果我的这个假设是正确的,你能指出我 C 标准在哪里这么说吗?对于保证此属性的填充放置有任何严格的规则吗?

最佳答案

C 通过 offsetof 的规范锁定特定结构类型中字段的偏移量。宏,在 this version 的 §7.17 中草案,它在<stddef.h>中描述了所需的宏。 .

The macros are

NULL

which expands to an implementation-defined null pointer constant; and

offsetof(type, member-designator)

which expands to an integer constant expression that has type size_t, the value of which is the offset in bytes, to the structure member (designated by member-designator), from the beginning of its structure (designated by type). The type and member designator shall be such that given

static type t;

then the expression &(t.member-designator) evaluates to an address constant. (If the specified member is a bit-field, the behavior is undefined.)

由于它是一个常量表达式,因此每次使用特定结构类型都必须使用相同的偏移量(否则这将是完全疯狂的)。两种不同的结构类型,即使声明相同,也不受此限制以具有相同的布局。 (例如,如果类型是在不同结构布局编译指示的控制下声明的,则它们不一定具有相同的布局,但声明看起来表面上相同。 typedef 是重要!)

关于c - 结构中的填充总是相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39954255/

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