gpt4 book ai didi

c - 聚合初始值设定项与隐式结构填充

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

在如下代码中,我们通常在结构末尾有一个 2 字节的隐式填充:

struct foo {
int32_t x ;
int16_t y ;
// <<< 2 bytes for total sizeof(foo) == 8
} ;

今天有人问我聚合初始值设定项如何处理额外的两个字节:

foo o = { 0, 0 } ;

即:这相当于

foo o ;
memset( &o, 0, sizeof(foo) ) ;

我不知道,所以我建议不要依赖它(无论如何,聚合首字母缩写都很麻烦,所以在我看来这是一个很好的一般建议)。

有人知道 C 语言规范是否说明了当平台 ABI 需要对相关特定结构进行此类填充时聚合初始化对隐式填充的作用吗?

最佳答案

引用 C99 标准,“类型表示”,6.2.6:

When a value is stored in an object of structure or union type, including in a member object, the bytes of the object representation that correspond to any padding bytes take unspecified values.

简而言之,不是语言指定的;这取决于 C 编译器/接口(interface)实现者。

关于c - 聚合初始值设定项与隐式结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311993/

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