zod*_*iac 4 c gcc struct initialization
我有以下结构:
typedef struct my_struct {
int a;
int b;
int *c;
} my_struct;
Run Code Online (Sandbox Code Playgroud)
是:
my_struct n = (my_struct) { .b = 3 };
Run Code Online (Sandbox Code Playgroud)
相当于:
my_struct n = (my_struct) { .a = 0, .b = 3, .c = NULL };
Run Code Online (Sandbox Code Playgroud)
关于什么:
my_struct n = (my_struct) { .b = 3, 0 };
Run Code Online (Sandbox Code Playgroud)
它们应该被初始化,好像它们是静态的,我们可以在草案C99标准部分找到这个.6.7.8
初始化第19段说(强调我的):
初始化应在初始化器列表顺序中进行,每个初始化器为特定子对象提供,覆盖任何先前列出的同一子对象的初始化器; 132)未明确初始化的所有 子对象应与具有静态存储持续时间的对象隐式初始化.
如果以下初始化程序不是指示符,那么它将在该指示符之后接收下一个字段,如第17段所述:
每个大括号括起的初始化列表都有一个关联的当前对象.当没有指定时,根据当前对象的类型按顺序初始化当前对象的子对象:增加下标顺序的数组元素,声明顺序中的结构成员,以及union的第一个命名成员.29)相反,指定使得以下初始化器开始初始化由指示符描述的子对象.然后初始化按顺序继续向前,从指定者描述的下一个子对象开始.130)
这按照段落20递归地应用于子聚合:
如果聚合或联合包含聚合或联合的元素或成员,则这些规则递归应用于子聚合或包含的联合
初始化静态持续时间对象的规则见6.7.8
第10节:
如果未显式初始化具有自动存储持续时间的对象,则其值不确定.如果未显式初始化具有静态存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员; [...]
归档时间: |
|
查看次数: |
819 次 |
最近记录: |