int variable[ 변수 ] in C/C++
글쓴이: ddoman / 작성시간: 목, 2009/01/29 - 8:11오후
#include <stdio.h> int main(){ int people; scanf( "%d", &people ); int array[people]; return 0; }
원래 C에서 int array[ 변수 ] 같은 문장을 허용했었나요?
저렇게 int array[], 이런식으로 하면, 스택영역에 놓여지기 때문에
컴파일타임에 컴파일러가 저 array의 메모리 크기를 다 알아야 할거라고 생각했기에
허용이 되지 않는 문장일거라 생각했었거든요.
그런데, gcc/g++ v4.1.2 에서
-std=c89
-ansi
-std=c++98
-Wall
이것저것 다 주어봐도 완벽히 잘 컴파일 되네요?
저게 원래 허용이 되는 문장이었나요?
Forums:
Re: 허용되지 않는 문법이 맞습니다.
허용되지 않는게 맞습니다. C99 부터 허용되는 문법이죠.
(C++ 에 대해서는 언제부터 허용되는 문법이였는지 정확하게 모르겠습니다만, C99 가 나오기 전부터 가능했을 겁니다)
gcc 에서 아무런 문제없이 컴파일 되는게 뭔가 좀 신기한데....
gnu 확장 비슷한 식으로 해당 코드를 허용하게 되어 있을지도 모르겠네요.
저러한 문법에 대한 경고 메세지를 보려면 -pedantic,
경고 대신에 컴파일 에러를 띄우게 하고 싶으면 -pedantic-errors
옵션을 주면 됩니다.
-pedantic 옵션을 주고
-pedantic 옵션을 주고 해보세요.
c89에서 variable size는 허용되지 않으나, gcc extension에서 허용합니다.
std=c89로 지정해줘도 모순되지 않는 extension은 허용하거든요.
(글 쓰는 사이에 먼저 답변하신 분이 계셨군요. ㅎㅎ)
댓글 달기