C99의 sizeof와 가변길이 배열

C99 에서는 배열의 사이즈 지정에 변수를 사용할 수 있다.

void test1( int n )
{
  int fixed_array[10];
  int varlen_array[n];
   printf( "sizeof(fixed_array)==%ld\n", sizeof(fixed_array) );
   printf( "sizeof(varlen_array)==%ld\n", sizeof(varlen_array) ); 
}

test1(10); 로 인수를 10으로 해서 호출하면 아래와 같다.

sizeof(fixed_array)==40
sizeof(varlen_array)==40


그러나 보통의 배열과는 다르므로 컴파일 시에 szieof로 값을 알 수 없다.

void test2( int n )
{
  int fixed_array[10];
  int varlen_array[n];

  // sizeof(fixed_array)는 enum의 값으로 사용할 수 있다.
  enum{ FIXED_ARRAY_SIZE=sizeof(fixed_array) };

  // sizeof(varlen_array)는 enum의 값으로 사용할 수 없다. 컴파일 에러
  enum{ VARLEN_ARRAY_SIZE=sizeof(varlen_array) };
}



참고 http://qiita.com/Nabetani/items/a2ecdba9af0add723170


이 글은 2017-04-12에 작성되었습니다.