自动初始化结构成员为NULL

时间:2016-04-24 05:01:12

标签: c language-lawyer

我的目的是确保将 b 初始化为NULL。

标准ISO / IEC 9899:201x条款6.7.9-> 10州

  

如果具有静态或线程存储持续时间的对象不是   显式初始化,然后: - 如果它有指针类型,它是   初始化为空指针;

以下程序:

#include<stdio.h>

struct A
{
    char* b;
};

int main(void)
{
    static struct A obj;

    if (obj.b==NULL)
        printf(" obj.b auto Initialized\n");

    return 0;
}

给了我输出。

 obj.b auto Initialized

这是否意味着条款6.7.9-> 10适用于结构对象的所有成员?

注意:引文中的重点是我的

2 个答案:

答案 0 :(得分:3)

是的,这是正确的,还要注意有关聚合类型的条款:

  

如果是聚合,则根据这些规则初始化(递归)每个成员,           并且任何填充都被初始化为零位;

这意味着每个成员都初始化为该类型的零值,如果该成员是另一个结构,则其成员在同一规则下初始化。

答案 1 :(得分:3)

  

这是否意味着条款6.7.9-> 10适用于结构对象的所有成员?

是。子对象与它们所属的对象具有相同的存储持续时间。