이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
글쓴이: aNsITAte / 작성시간: 토, 2005/07/23 - 10:11오후
#include <stdio.h> int main() { int n; printf("Array Size? "); scanf("%d", &n); int x[n]; int i; for (i = 0; i < n; i++) { x[i] = i * 10; printf("%d ", x[i]); } printf("\n"); return 0; }
gcc 에서 되는 걸로 봐선 표준인거 같기는한데..
VS.net 에서는 왜 이런식으로 배열 할당이 안될까요?
VS.net 은 비표준 컴파일러인가요 ㅡ,ㅡ;;
아니면 혹시 C++ 이라서? ;;
Forums:
아무데서나 변수 선언이 가능한건 c99 부터라고 알고 있습니다 :)
아무데서나 변수 선언이 가능한건 c99 부터라고 알고 있습니다 :)
gcc 도 3.x 이전까지는 지원하지 않는 부분입니다...
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[code:1]int x[n];[/code:1]이런거
int x[n];
이런거 되나요 ?Re: 이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
C90에서 배열의 크기는 컴파일 시간에 상수여야 합니다. 그리고 gcc에서 된다고 꼭 표준인 것은 아닙니다. GNU Extension이란 것이 있습니다.
Re: 이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
이 답변 쓴 사람은 rhizome이었습니다. 로그인을 안 하고 글을 올려버렸네요...
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
Re: 이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
그리고 C99에서는 variable-length array가 표준에 포함되었습니다. 하지만 gcc는 훨씬 이전부터 variable array를 지원했던 걸로 압니다.
--
엉뚱한 말이 앞에 들어가서 수정했습니다.
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
Re: 이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
.모든 컴파일러는 표준+확장입니다.
확장을 쓰면 더 편리하나 이식성이 떨어집니다.
즐린
Re: 이게 왜 gcc에서는 되고 VS.net에서는 안될까요?
예, 물론 그렇습니다.
하지만 variable-length array의 경우 C99에 포함 되었기 때문에 표준입니다. visual c++에서 지원을 아직 안 하는 것 뿐이죠.
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
추가 정보
그리고 C99에 관한 짧은 글이 2004년 developerWorks에 실렸습니다. 참고하십시오.
http://www-128.ibm.com/developerworks/linux/library/l-c99.html?ca=dgr-lnxw07UsingC99
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
감사합니다.
-_-;; 이렇게 많은 분들께서...
감사합니다. (__)(^^)
그립다는 것은 아직도 네가 내 안에 남아 있다는 뜻이다.
그립다는 것은 지금은 너를 볼 수 없다는 뜻이다.
볼 수는 없지만 보이지 않는 내 안 어느 곳에 네가 남아 있다는 뜻이다.
-이정하의 《혼자 사랑한다는 것은》중에서-
와 새로운거 알았습니다. ^^
와 새로운거 알았습니다. ^^
저희 업소를 방문해 주셔서 감사합니다.
[quote="htna_"][code:1]int x[n];
경우에 따라 다릅니다.
C99를 지원하더라도 저 코드가 VLA가 가능한 부분에 포함될 경우에만 허용됩니다.
VLA에 관한 수 많은 글이 올라왔으니 검색해보시기 바랍니다.
- 죠커's blog / HanIRC:#CN
...
요것이 gcc 에서는 되나보군요... 첨 알았다는;;;
그런데 궁금해졌습니다. 저것이 되는 것이 확장기능이라고 하셨는데
동적할당하고의 차이점이 무엇인지요?
동적할당하고 별반차이 없다면 대충 그까이거 저렇게 하고 말지;;
/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();
Re: ...
scope가 한정되어 있을 때 C99표준은 VLA를 허용합니다.따라서 block 내부나 function등의 내부에서 사용되는 배열에서는 컴파일 타임에 배열의 수가 정해지지 않아도 됩니다. 어차피 그렇게 만들어진 배열은 프로그램이 수행 중에 메모리에서 배열을 할당하기 때문에 불가능할 이유가 없었던 거죠.
동적할당과의 차이점은 어떤 저장장소(storage)에 할당되느냐와 범용적으로 쓸 수 있느냐 이겠지요.
- 죠커's blog / HanIRC:#CN
gcc 옵션
gcc는 기본적으로 ISO C90 표준 + GNU extensions 모드로 동작하게 되어 있습니다.
만약에 특정 표준에 따라 gcc가 동작하기를 원하신다면 -std 옵션과 -pedantic-errors 옵션을 함께 이용하시면 됩니다. 예를 들어 최근에 나온 C99인 표준으로 동작하기를 원한다면
와 같이 사용하면 되구요. 이전 표준인 C90에 맞춰 동작하기를 원한다면
eternalbleu님이 보여주신 코드를 C90 모드로 컴파일하면 아래와 같은 결과가 나옵니다.
더 자세한 내용을 알고 싶다면 manual page를 참조하시면 됩니다.
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
댓글 달기