구조체의 초기화
글쓴이: ktd2004 / 작성시간: 월, 2006/06/19 - 8:28오후
구조체 초기화의 방법에 대한 질문입니다.
typedef struct aa = { int a; int b; }AA; /* 1번 방법 */ AA a = { 1, 2 }; /* 2번 방법 */ AA b = { .a = 1, .b = 2 }; /* 3번 방법 */ AA c = { a:1, b:2 };
테스트 결과 gcc(version 2.95.3)에서는 1,2,3번 모두 정상적으로 컴파일되고 동작합니다.
VC6, VC2005에서는 1번 방법만이 정상적으로 컴파일되고 동작합니다.(2,3번은 컴파일에러)
1번이 표준이고, 2,3번은 gcc의 확장기능인가요?
2,3번 방법과 관련된 자료나 링크를 알고 계시면 부탁드리겠습니다.
Forums:
아직 자세히 글을
아직 자세히 글을 쓰지는 않았지만,
C FAQ Q 2.20을 보기 바랍니다.
1은 ANSI 표준, 2는 ISO C (C99) 표준, 3은 GCC 확장 기능입니다.
자세한 것은 5.21 Designated Initializers을 참고하기 바랍니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답변
답변 감사드립니다.
VC2005에서는 2번방법(C99 표준)이 컴파일에러가 발생하는 것은
VC2005가 아직 해당 표준을 지원하지 않아서라고 이해하면 될까요?
VS 2005 는 ISO C95 까지 지원합니다.
MSDN 잘 찾아보면 그렇게 나오더군요.
그리고 C++ 는 ISO C++ 98 까지 지원합니다.
그외 .NET 에 대한 ECMA 표준을 지키는 것 같은데 그건 잘 기억이 안나고...
하여간 C99 기능을 쓰실 수 없습니다.
// 와 같은 한 줄 주석은 물론 쓸 수 없고 선언은 반드시 block 의 첫 머리에 와야 하는 등
향후 지원조차도 고려를 안 하는 것이 아닐까 싶습니다.
나름대로 이유가 있는지는 모르겠습니다만...
"VS의 경우는 C로
"VS의 경우는 C로 코딩하는 사람은 거의 없고, 대부분 C++ 이라서 C 컴파일러는 더 이상 개발 안하는걸까?" 라고 혼자 생각한적이 있죠 ^^ ㅎㅎ
댓글 달기