初始化结构的第一个元素或整个结构?

Nan*_*iao 5 c gcc

all:
用C语言:

struct A  
{
    int a;
    int b;
};

A aa = {0};  
Run Code Online (Sandbox Code Playgroud)

此语句仅初始化aa.a或初始化整个结构?或者行为取决于编译器?
提前致谢!

Joh*_*ode 1

从标准(N1570

\n\n
\n

6.7.9 初始化

\n...
\n10 如果具有自动存储持续时间的对象未显式初始化,则其值\n是确定的。如果一个具有静态或线程存储持续时间的对象未显式初始化,则:
\n\xe2\x80\x94 如果它具有指针类型,则将其初始化为空指针;
\n\xe2\x80\x94 如果是算术类型,则初始化为(正或无符号)零;
\n\xe2\x80\x94 如果是聚合,则根据这些规则(递归地)初始化每个成员,并且任何填充都初始化为零位;
\n\xe2\x80\x94 如果它是联合,则 \xef\xac\x81rst 命名成员根据这些规则初始化(递归),并且任何填充都初始化为零位;
\n...
\n21 如果大括号括起来的列表中的初始值设定项少于聚合的元素或成员\n,或者用于初始化已知大小的数组\n的字符串文字中的字符少于\n中的元素数组中,聚合的其余部分应\n隐式初始化,与具有静态存储持续时间的对象相同。\n
\n\n

因此,在您的示例中,aa.a由于初始化程序,将显式初始化为 0,而aa.b由于上述子句,将隐式初始化为 0。

\n