variable length array Linux/C/C++ 2012. 7. 16. 10:08

C에서는 가변길이의 배열을 잡을 수 없다는 사실이 아주 오래전 부터 머리속에 각인되어 있었다.

즉,

void makeArr(int number)
{
int arr[number];
....
....
}

위와 같은 형태로는 배열을 생성할 수 없다.
배열의 길이를 런타임에 결정하기 위해서는 malloc() 함수를 사용해야 한다.

int* arr = (int)malloc(sizeof(int)*number);

위오 같은 형태로 배열을 생성해 줘야 런타임에 배열의 길이를 정하여 생성할 수 있었다.


근데!!! 이게 바꼈단다.
언제부터인지는 모르지만 C99의 표준을 반영한 컴파일러는 Variable Length Array 를 지원한단다.
즉,

int arr[number];

와 같은 형태로 선언하여 컴파일 해도 전혀 문제가 되지 않는다는 얘기다.
확인하기 위해 현재 내 컴퓨터에 깔려 있는 GCC 4.4.1 버전으로 테스해 봤더니 정상적으로 동작한다.
C99이 99년도에 나왔다는데 평소 C를 전혀 사용하지 않으니.. 관심도 없었나 보다.

참고로 MS계열의 컴파일러는 이를 지원하지 않는다. Visual Studio 2008 에서 테스트 해 봤지만 컴파일 에러를 뿜었다.


컴파일 옵션 : --std=c99