2010-10-07 3 views
2

Я использовал, чтобы инициализировать свои структуры таким образом:Вид редкой инициализации для структур, любых ресурсов?

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 

ответ

2

Вы правы, это всегда работает. Соответствующий раздел в проекте C99 N1256 является 6.7.8 (инициализация):

21. Если количество инициализаторов в фигурных скобках огороженного списка, чем есть элементы или члены совокупности, или меньше символов в строковом литерале, используемом для инициализации массива известного размера, чем в массиве есть элементы, остаток от агрегата должен быть , который неявно инициализируется тем же, что и объекты, имеющие статическую продолжительность хранения.

Объекты времени статического хранения инициализируются нулем (параграф 10 того же раздела).

стандарт

Стандарт ANSI короче, но подобны в 3.5.7:

Если есть меньше инициализаторы в списке, чем есть члены агрегат, остальная часть совокупности должна быть инициализирована неявно такие же, как объекты, имеющие статическую продолжительность хранения.

 Смежные вопросы

  • Нет связанных вопросов^_^