51.5 연습문제: 패킷 크기 조절하기

다음 소스 코드를 완성하여 6이 출력되게 만드세요.

practice_struct_align.c

#include <stdio.h>

#pragma pack(push, 1)
struct Packet {
    _________ length;
    int seq;
};
#pragma pack(pop)

int main()
{
    struct Packet pkt;

    printf("%d\n", sizeof(pkt));

    return 0;
}

실행 결과

6

정답

short
또는
unsigned short

해설

구조체 Packet#pragma pack(push, 1)를 사용하여 1바이트 단위로 정렬하고 있습니다. 따라서 남는 공간을 채우지 않고 자료형 크기가 그대로 모여서 구조체의 크기가 됩니다.

최종 구조체 크기가 6이고, 멤버는 4바이트짜리 int 하나가 있으므로 필요한 크기는 2바이트입니다. 그러므로 2바이트 크기인 short 또는 unsigned short를 사용하면 됩니다.