gpt4 book ai didi

c - 当描述符重叠时,C11 数组初始化的行为是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:09 25 4
gpt4 key购买 nike

鉴于此

int array[10] = {
[0] = 1, 1, 1, 1, 1, 1, 1, // 7 values
[5] = 9
};

gcc (6.3.1) 不会生成初始化重叠的错误或警告。

什么是定义行为?应该有警告还是数组按指示符出现的顺序初始化?

最佳答案

没有警告。该数组按指示符出现的顺序进行初始化,因此后面的指定会覆盖前面的。

在您的示例中,您首先为前七个值(索引 0 到 6)分配了 1,然后为第六个值(索引 5)分配了 9。

您的数组将包含值(按索引 0 到 9 的顺序)

  • 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 来自第一个定义,[0] = 1, 1, 1, 1, 1 , 1, 1,
  • 1, 1, 1, 1, 1, 9, 1, 0, 0, 0 从第二个开始,[5] = 9

这也符合 C99 和 C11 标准,如其所述

"The initialization shall occur in initializer list order, each initializer provided for a particular subobject overriding any previously listed initializer for the same subobject"

关于c - 当描述符重叠时,C11 数组初始化的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50278170/

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