본문 바로가기
코딩/C언어

C언어, 배열의 크기를 변수로 선언이 가능한가? (with C99)

by yenua 2021. 1. 31.
반응형

C언어를 공부하다보니 N개의 정수를 입력받아 처리를 하라는 문제를 풀게 되었다. 정렬을 해야했기 때문에 리스트를 사용해야 했는데, 리스트의 크기를 선언할 때 변수로 선언이 되는지 궁금했다.

 

찾아보니까 된다고 한다. 그런데 몇 가지 조건이 있다. 배열의 크기를 변수로 선언하는 것은 C99이라는 최신 표준안부터 지원하는 기능이다. 여기서 C99은 ANSI에서 제정한 표준안으로 99년도에 제정된 '최신' 표준안이다. 99년도인데 최신이란다.. 여기서 더 놀라운 것은 20년 넘게 지난 표준안이 아직도 적용되지 않은 컴파일러들이 있다는 것이다. 대표적으로 마이크로소프트의 Visual Studio는 표준을 지키고 있지 않다. 그래서 배열의 크기를 변수로 선언하게 되면 오류가 발생하게 된다.

내가 쓰는 dev C++이나 직접 해보진 않았지만 GCC(GNU C Compiler)에서는 C99 표준을 지키고 있기 때문에 배열의 크기를 변수로 선언이 가능하다.

예시 코드는 다음과 같다.

 

int main(void){
	
	int n, i;
	printf("입력할 정수의 개수를 입력하세요. ");
	scanf("%d", &n); //정수의 개수를 미리 입력 받음
	int a[n]; //입력받은 정수의 개수를 변수의 크기로 설정
(생략)

 

처음 이야기한 문제의 풀이 코드의 앞부분만 따온 것이다. 코드에 나왔다 싶이 C99을 채택한 컴파일러에서는 리스트의 크기를 변수로 선언이 가능하다. 그렇지 않은 컴파일러에서는 그런 기능을 지원하지 않는다...

반응형

'코딩 > C언어' 카테고리의 다른 글

[C, C++/Visual Studio 2019] C6385 오류 해결 방법  (0) 2021.09.25
C언어 오개념 %lf에 대하여  (0) 2021.04.05