더북(TheBook)

TAKEAWAY 5.36 묶음형(aggregate) 데이터 타입은 지정 초기자로 초기화한다.

T 타입 변수를 초기화하는 방법을 모를 때는 디폴트 초기자(default initializer)CT a = {0}을 사용하면 대부분 해결된다.6

TAKEAWAY 5.37 VLA를 제외한 모든 오브젝트 타입은 디폴트 초기자인 { 0 }을 사용할 수 있다.

이 과정에서 몇 가지 규칙이 적용된다. struct의 멤버(6.3절 참조)나 배열의 원소(6.1절 참조)에서 초기화 대상을 구체적으로 지정하지 않으면 선언 순서(declaration order)C대로 초기화된다. 다시 말해 디폴트 초기자에서 0은 맨 앞에 선언된 멤버를 가리키며, 나머지 멤버도 0으로 초기화된다. 스칼라에 대한 초기자를 {} 형태로 지정하면 {0}도 적용할 수 있다.

이때 컴파일러가 경고 메시지를 출력할 수도 있다. 아쉽게도 몇몇 컴파일러는 이러한 특수 규칙이 구현되어 있지 않다. 이 규칙은 C 표준에서는 catch-all 초기자로 특별히 정의한 것이다. 필자는 항상 컴파일러 경고 메시지를 켜두지만, 이 경우에는 예외적으로 경고 출력 옵션을 끈다.

초기자의 값은 프로그램에서 특별한 의미를 갖는 것으로 지정한다.

 

 


  6 6.1.3절에서 설명하는 가변 길이 배열(VLA)은 예외다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.