2010년 10월 25일 월요일

c array initialize { 0 }; or { 0, };

얼마전에 { 0 ,}; 이렇게 배열을 초기화 하는 것을 당연 하게 생각 했는데..
인터넷에 검색 해보니 { 0 } 이렇게 알고 있는 사람도 많은듯 하여

리눅스 에서 gcc로 테스트 해보았다.

$ cat array_init.c
#include
int main (void)
{
int a[10]={ 0 };
int b[10]={ 0,};
int c[10]={ 1 };
int d[10]={ 1,};
int e[10];
printf ("a[] %d %d \n", a[0], a[1]);
printf ("b[] %d %d \n", b[0], b[1]);
printf ("c[] %d %d \n", c[0], c[1]);
printf ("d[] %d %d \n", d[0], d[1]);
printf ("e[] %d %d \n", e[0], e[1]);
}
$ gcc -o array_init array_init.c
$ ./array_init
a[] 0 0
b[] 0 0
c[] 1 0
d[] 1 0
e[] 0 0
$ gcc -O2 -o array_init array_init.c
$ ./array_init
a[] 0 0
b[] 0 0
c[] 1 0
d[] 1 0
e[] 1478605760 1478605760

{ 0 } , { 0, } 모두 초기화 된다.
옵티마이즈 레벨을 주지 않으면 배열은 그냥 초기화 된다.
(디 버깅 시에 지역 변수들이 쓰레기 값을 가지지 앟고 침착 하게 초기화 되어 잇는 상황을 자주 보았을 듯..)

{ 1 }, { 1, } 가 1로 모두 초기화 하라는 뜻은 아니다.
이런 경우 memset() 을 이용 해야 겟다.

댓글 없음: