프로그래밍언어/C언어[Error]

[C언어][Error] 079. invalid application of ‘sizeof’ to bit-field – 비트필드에 sizeof 사용

about_IT 2025. 5. 2. 20:44

이 오류는 C언어에서 비트 필드(bit-field)에 대해 sizeof 연산자를 사용했을 때 발생합니다. 비트 필드는 구조체 내에서 개별 비트 단위로 크기를 지정하는 멤버로, 일반 변수처럼 메모리 주소를 가지지 않기 때문에 sizeof 연산이 불가능합니다.

 

즉, 비트 필드는 독립적인 메모리 공간이 아니라 구조체 내부에서 다른 비트 필드와 함께 공유되는 영역이므로, 크기를 계산할 수 없습니다.

 


● 오류 예제

#include <stdio.h>

struct Flags {
    unsigned int a : 3;
};

int main() {
    struct Flags f;
    printf("%zu\n", sizeof(f.a));  // 오류: 비트 필드에 sizeof 사용
    return 0;
}

컴파일 시 다음과 같은 오류 메시지가 출력됩니다.

error: invalid application of ‘sizeof’ to bit-field

 


● 해결 방법

비트 필드에는 sizeof를 사용할 수 없으므로, 구조체 전체의 크기를 계산하거나 비트 필드가 아닌 일반 멤버에 대해 sizeof를 사용해야 합니다.

#include <stdio.h>

struct Flags {
    unsigned int a : 3;
    unsigned int b;
};

int main() {
    struct Flags f;
    printf("%zu\n", sizeof(f));     // 구조체 전체 크기 출력
    printf("%zu\n", sizeof(f.b));   // 일반 멤버는 가능
    return 0;
}

출력 예시:

8
4

 


● 실전 팁

  • 비트 필드는 메모리 주소를 가지지 않기 때문에 sizeof 연산이 불가능합니다.
  • 비트 필드의 크기는 명시된 비트 수로만 해석되며, 실제 메모리 배치는 컴파일러에 따라 다릅니다.
  • sizeof는 반드시 일반 변수 또는 구조체 전체, 포인터 등에만 사용하세요.

 

비트 필드는 특별한 용도로 사용되는 구조체 멤버이므로, 일반적인 변수처럼 다루지 않아야 하며, sizeof와 같은 연산은 사용할 수 없다는 점을 기억해 두어야 합니다.