2009-04-18 6 views
5

누구 지정된 이니셜 라이저에 대해 다음 줄을 설명해 주시겠습니까 :지정 초기화 생략 요소

이니셜 라이저 목록이 아니라 단지 말보다, 어디서나 집계에서 선언 된 요소를 생략 할 수 있습니다.

답변

2

시도해보십시오. link.

아이디어는 초기화하는 동안 구조와 같은 복잡한 유형의 멤버를 참조 할 수 있어야합니다. 예 :

struct s { 
    int a, b; 
}; 

int main() { 
    struct s = { .b = 42, .a = -42 }; 
    return 0; 
} 

값을 지정할 때 융통성은 순서 독립적 인 것으로부터 얻습니다. 이것은 C99 표준에 추가되었으며 C99을 완전히 지원하지 않는 컴파일러 (또는 이전 버전의 표준 지원)가 지원하지 않을 수 있음을 기억하십시오.

8

은 사용자가 기존의 initialiser 목록을 사용하는 경우, 요소의 값이 순서대로 할당됩니다, 그래서 당신은이 구조체가있는 경우 :

foo_t value = { 7 }; 
:

typedef struct _foo { 
    int a; 
    int b; 
} foo_t; 

다음이 initialiser 명시 적으로 a하지 b 할당

지정된 초기화 프로그램이 없으면 생략 할 수있는 요소는 모두 끝에 선언 된 것입니다.

usi 구조체의 첫 번째 가치에도 불구하고,

foo_t value = { .b = 8 }; 

그렇게 value.a의 initialiser를 생략 : 지정 initialisers 겨, 당신은 어디서든 선언 요소를 생략 할 수 있습니다.