본문 바로가기

C/C++

Variably Modified (VM) arrayㄴ :: VLA ( Variable Length Arrayㄴ )

int _tmain(int argc, _TCHAR* argv[])
{
   int arr_size = 10;
   
   float var_array[arr_size];


   return 0;
}

이런 형태의 배열은 visual c++ 2008 에서도 혀용되지 않는다.
gcc는 가능.

gcc -std=iso9899:1999 와 같은 옵션이 해당되며 디폴트로 컴파일 가능하다. 

물론 C99 표준에 부합하는 문법이다.

C99 예.
extern int n;
int A[n]; // Error - file scope VLA.
extern int (*p2)[n]; // Error - file scope VM.
int B[100]; // OK - file scope but not VM.

void fvla(int m, int C[m][m]) // OK - VLA with prototype scope.
{
typedef int VLA[m][m] // OK - block scope typedef VLA.

struct tag {
int (*y)[n]; // Error - y not ordinary identifier.
int z[n]; // Error - z not ordinary identifier.
};
int D[m]; // OK - auto VLA.
static int E[m]; // Error - static block scope VLA.
extern int F[m]; // Error - F has linkage and is VLA.
int (*s)[m]; // OK - auto pointer to VLA.
extern int (*r)[m]; // Error - r had linkage and is
// a pointer to VLA.
static int (*q)[m] = &B; // OK - q is a static block
// pointer to VLA.
}