2010-10-07 44 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

你是對的,這總是工作。在N1256 C99草案的相關部分是6.7.8(初始化):

21.如果在一個大括號內的列表更少初始化比有元件或聚集體的成員,或更少的字符在用於初始化一個已知大小的數組而不是數組中的元素的字符串文字中,聚合的其餘部分應該是 ,隱式地初始化爲與具有靜態存儲持續時間的對象相同。

靜態存儲時間的對象被初始化爲零(同一部分的第10段)。

ANSI標準較短,但類似的3.5.7:

如果在列表中較少初始化值多於的 成員的集合,在總的剩餘部分將被隱式初始化 與具有靜態存儲持續時間的對象相同。