代码之家  ›  专栏  ›  技术社区  ›  bua

结构的稀疏初始化,有资源吗?

  •  2
  • bua  · 技术社区  · 15 年前

    我曾经用这种方式初始化我的结构:

    struct A a = {0};
    

    这似乎对我有用,但是我被争论关于ANSI C,C89,C99标准。
    只是我在任何文档中都找不到。

    #include <stdio.h>
    struct DATA
    {
        int a;
        int b;
        char tab[3];
    };
    
    
    int main(void)
    {
        struct DATA A;
        struct DATA B = {0};
    
        printf("A.a: %d, A.b: %d, A.tab: %s\n", A.a, A.b, A.tab);
        printf("B.a: %d, B.b: %d, B.tab: %s", B.a, B.b, B.tab);
    };
    
    >>>>>OUTPUT:
    D:\N\workspace>test.exe
    
    A.a: 4203600, A.b: 451445257, A.tab: ■   
    B.a: 0, B.b: 0, B.tab:
    

    这个显示它首先用1初始化,其余用0初始化。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
        int a;
        int b;
    } ASDF;
    
    ASDF A = {1};
    
    int main()
    {
        printf("a:%d,b:%d\n",A.a,A.b);
        return 0;
    }
    
    Output:
    a:1,b:0
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   schot    15 年前

    你说得对,这总是管用的。C99草案N1256中的相关章节是6.7.8(初始化):

    21岁。 隐式初始化与具有静态存储持续时间的对象相同。

    ANSI标准较短,但类似于3.5.7:

    如果列表中的初始值设定项少于 集料,集料的剩余部分应初始化 隐式地与具有静态存储持续时间的对象相同。