【发布时间】:2020-02-03 11:03:15
【问题描述】:
在查看 N2310 中聚合的初始化规则时,我发现以下段落(emp. mine):
6.7.9(p19):
初始化应按初始化列表顺序进行,每个 为覆盖任何特定子对象提供的初始化程序 先前列出的相同子对象的初始化程序; 154) 全部 应初始化未显式初始化的子对象 与具有静态存储持续时间的对象隐式相同。
6.7.9(p21):
如果大括号括起来的列表中的初始值设定项比那里少 是聚合的元素或成员,或 用于初始化已知大小的数组的字符串文字 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间。
在我看来,6.7.9(p19) 暗示了6.7.9(p21)(但反之亦然)。例如:
#include <stdio.h>
struct test{
int a;
int b;
int c;
};
int main(){
struct test test = {
.a = 123
};
printf("%d%d%d\n", test.a, test.b, test.c); //obviously, 12300 is printed
}
我觉得这个案例6.7.9(p19)和6.7.9(p21)都可以解释
6.7.9(p21) 的目的是什么?我错过了什么?
【问题讨论】:
标签: c struct initialization aggregate language-lawyer