【问题标题】:Kind of sparse initialization for structures, any resources?结构的稀疏初始化,任何资源?
【发布时间】:2011-04-22 06:03:24
【问题描述】:

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

struct A a = {0};

这似乎对我有用,但是我对 ANSI C、C89、C99 标准存在争议。
只是我在任何文档中都找不到。
你能帮我解决这个问题吗?
这是一个适用于“cl”的示例(VS express 2008)。

#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

【问题讨论】:

    标签: c struct initialization c99 c89


    【解决方案1】:

    你是对的,这总是有效的。 C99 草案 N1256 中的相关部分是 6.7.8(初始化):

    21. 如果大括号括起来的列表中的初始化程序少于聚合的元素或成员,或者用于初始化已知大小数组的字符串文字中的字符少于那里是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储持续时间的对象相同。

    静态存储持续时间的对象被初始化为零(同一部分的第 10 段)。

    ANSI 标准更短,但在 3.5.7 中类似:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      相关资源
      最近更新 更多