z


배열 혹은 구조체 초기화 시 항상 습관처럼 아래와 같이 사용해왔다.

typedef struct _SOME{
int x;
int y;
int z;
}SOME;

SOME sm = {0};

int x[MAX] = {0};

근데 다른 코드들을 보니 의외로 아래와 같이 ','를 붙여서 사용하는 행자들도 많더라.

SOME sm={0,};
int x[MAX]={0,};

흠.. 도대체 뭐가 차이일까나.. 문서를 찾아볼까 하다가 귀차니즘 발동에 걍 테스트 해보기로 함.

환경은 VC 2005, GCC는 당장 환경이 안되서 스킵.

아래는 간략한 정리내용 (사실 복잡할게 없다능...ㅡ.ㅡ)

int n[MAX] = {}; -> 모두 0 으로 초기화
int n[MAX] = {0}; -> 모두 0 으로 초기화
int n[MAX]={0,}; -> 모두 0 으로 초기화
int n[MAX]={1}; -> n[0] = 1, n[1~9] = 0
int n[MAX]={0,1}; -> n[0] = 0, n[1] = 1, n[2~9] = 0

따라서, {}에 명시된 값이 없으면 모두 0으로 초기화,
명시된 값이 있으면 해당 인덱스의 엘리먼트만 해당 값으로 초기화

즉, int n[MAX]={0}일 때, 실제 n[0]=0 (명시적) n[1~9]=0 (암묵적)으로 모두 0으로 초기화됨. 구조체도 테스트 결과 같은 방식이 적용됨.

* VC2005에서만 해봐서 GCC등 다른 컴파일러는 모르겠음.

혹시 이게 틀리면 굳이 리플달아 주시길 바람.

AND