본문 바로가기
3. 개발 관련/공부 :: c

Flexible Array Member in C

by kyuho.choi 2023. 5. 1.
728x90
반응형

https://www.geeksforgeeks.org/  나 https://embetronicx.com/ 에서 재밌어 보이는 topic 들 위주로만 다루어 보고 있다.

 

struct 내에서 array 를 선언할 때 사이즈를 지정하지 않는 녀석으로 code size 관리에 유용하게 사용될 만 하다.

 

#include <stdio.h>

typedef struct
{
   char data[14]; // 배열 사이즈 지정
   char op;
   char type;
} STT; // 일반 struct 선언

typedef struct
{
   char op;
   char type;
   char data[]; // 배열 사이즈 미지정
} FAM_ST;

int main()
{
    STT stt;
    FAM_ST FST;
    
    printf("Size of struct = %ld\r\n", sizeof(stt)); // 사이즈 확인
    printf("Size of struct = %ld\r\n", sizeof(FST)); // 사이즈 확인
    
    return 0;
}

해당 코드를 실행해 보면 아래와 같다.

Size of struct = 16 // char * 2 + char 14 

Size of struct = 2 // char * 2, FAM 가산 없음

 

실제 해당 struct 를 사용할 때는 번거롭다. 별도 lib 로 만들어서 사용해야 할 듯 하다.



typedef struct
{
   char op;
   char type;
   char data[]; // 배열 사이즈 미지정
} FAM_ST;

int main()
{
    FAM_ST *FST = (FAM_ST *) malloc( sizeof(*FST) + (sizeof(char) * strlen("PARAM SIZE")) ); // struct + 배열 사이즈 지정하여 할당
    
    FST->op    = 28;
    FST->type = 'R';
    strcpy( FST->data, "Read10" ); // 할당한 배열보다 작은 사이즈를 넣어봄
    
    printf("Size of struct = %ld\r\n", sizeof(FST)); // 사이즈 확인
    
    free(FST); // malloc 을 사용해야 하므로 free 가 따라와야 하는 번거로움이 존재한다.
    
    return 0;
}

해당 코드를 실행해 보면 아래와 같다.

Size of struct = 8 // char * 2 + "READ10" 6 byte
728x90
반응형

댓글