C++ 배열 초기화 질문입니다.
글쓴이: minkyuramer / 작성시간: 월, 2017/03/20 - 2:23오후
이해가 안가 질문 올립니다.
int a[2] = {2,3};
a[4] = 0;
위와 같이 코딩하면 디버깅 에러 나야 정상아닌가요 ?
이미지 파일 보시면 에러가 안뜨고 잘되는데
Visual studio 2008 버그인건지 제가 모르는 무언가가 있는건지 궁급합니다.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 19.13 KB |
Forums:
c언어는 배열 index에 대한 유효성(?) 체크를
c언어는 배열 index에 대한 유효성(?) 체크를 하지 않습니다. a[4] = 0 는 그저 *(a + 4) = 0 이고 문법적으로 아무 문제가 없습니다.
그런데 워닝도 없나요? 최근 컴파일러들은 워닝은 해주는 것도 같던데요. 2008 이라서 그런지도 모르겠습니다.
차고로 제 맥에서 컴파일 한 결과는 아래와 같습니다.
tt.cpp:13:1: warning: array index 4 is past the end of the array (which contains
2 elements) [-Warray-bounds]
t[4] = 0;
^ ~
tt.cpp:11:1: note: array 't' declared here
int t[2] = {2, 3};
^
1 warning generated.
아하 유효성 체크
감사합니다 . 안타깝게 경고조차 없네여
경고수준 올리면 다 뜹니다
경고수준 올리면 다 뜹니다
C 프로그래머의 자유도를 위해 허용은 합니다.
C 프로그래머의 자유도를 위해 허용은 합니다.
이런 해괴망칙한(struct hack이라 불리는) 코딩을 위해 배열의 경계체크를 하지 않습니다.
해당 부분은 문법오류가 아니라
런타임에 오류에 해당하므로, 문법상의 잘못된 부분은 없기 때문에 컴파일 시 오류로 구분하지 않는게 기본이죠.
댓글 달기