2009. 4. 29. 11:59

Flexible array member

표준(c90/c95)의 엄격한 해석에 따라 유용하게 사용할 수 있는 편범이 올바르지 않은 것으로 결론나자.
C99는 해당 편법을 정당하게 지원할 수 있는  flexible array member라는 기술을 새로 추가하였다.
즉 배열이 구조체나 공용체의 마지막 요소인 경우에 한해 선언 시에 그 크기를 명시하지 않고
나중에 할당받을 수 있도록 배려한 것이다. - 출처 : C언어 펀더멘탈 -

#include <stdio.h>
#include "stdlib.h"

struct A {
    int a;
    int b[];
};
   
int main()
{
    const int N = 10;
    int i;
   
    struct A* p = (A*)malloc(sizeof(struct A) + sizeof(int) * (N - 1));
   
    p->a = 100;
    for (i = 0; i < N; i++)
    {
        p->b[i] = i;
    }
       
    printf("%d %d %d\n", p->a, p->b[0], p->b[N-1]);
    for( int loop = 0 ; loop < N + 1 ; loop++ )
    {
           printf("%d %d\n", p->a, p->b[loop]);
    }   
    system("pause");
    //free(p);
   
    return 0;  
}