2012-12-21 8 views

답변

6

이러한 것을 초기화 지정자라고합니다 (C99에 추가됨). 구조체의 위치 대신 멤버 이름을 기반으로 초기화 도구를 지정할 수 있습니다. 일부 멤버를 초기화하고 다른 멤버는 초기화하지 않는 경우 유용 할 수 있습니다 (초기화에 대해 신경 쓰지 않는 멤버는 구조체의 끝에있는 것이 아닙니다).

+0

이름을 사용하여 초기화하고 위치를 사용하면 어떤 차이가 있습니까? 언제 그리고 어느 것을 사용할 것인가? –

+1

@ user1160090 : 이름을 사용하면 필드의 수/순서가 변경 될 수 있더라도 값이 원하는 필드로 이동합니다. C와 그것을 지원하는 컴파일러에만 관심이 있다면, 나는 대부분 지정된 시간에 초기화 프로그램을 사용한다. –

+0

ur 지원을위한 Jerry –

3

이 작업은 명확성과 향후 호환성을 위해 수행되었습니다.

당신이 구조가있는 경우 :

struct confd_data_cbs { 
    TypeA callpoint; 
    TypeB get_object; 
    TypeC get_next; 
}; 

그러나 어느 시점에서

나중에과 같이 정의를 변경 :

struct confd_data_cbs { 
    TypeA callpoint; 
    TypeD set_object; /* New Field Added */ 
    TypeB get_object; 
    TypeC get_next; 
}; 

을 그리고 어떤 이니셜 이름이없는 것이다 분야를 지정하지가 않는다 더 긴 일.
ssd_common_get_objectset_object에 할당되고 get_next은 필드의 순서가 변경 되었기 때문에 초기화되지 않은 상태로 남습니다.

필드 이름을 지정할 때 순서 또는 필드 수가 나중에 변경되는 경우에도 올바른 필드가 초기화되는 것을 알 수 있습니다.

+0

ur 지원을위한 @abelenky –

관련 문제