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

[C언어][Error] 061. bit-field width not an integer constant or has invalid type – 비트 필드의 크기가 정수 상수가 아님

about_IT 2025. 4. 29. 00:22

이 오류는 구조체 안에 선언된 비트 필드(bit-field)의 크기가 정수 상수가 아니거나, 지원되지 않는 타입으로 선언되었을 때 발생합니다. 비트 필드는 주로 메모리 절약이나 특정 하드웨어 접근 제어를 위해 사용되며, 반드시 int 또는 unsigned int 같은 정수형과 함께 사용되어야 하고, 너비(width)는 컴파일 타임 상수로 지정되어야 합니다.


변수나 연산식 등 런타임 값은 비트 필드의 크기로 사용할 수 없습니다.



● 오류 예제

struct Flags {
    int a : 2.5;  // 오류: 정수가 아닌 실수 사용
};

또는 아래와 같이 변수로 크기를 지정해도 오류가 발생합니다:

int size = 3;
struct Flags {
    int b : size;  // 오류: size는 상수가 아님
};

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

error: bit-field width not an integer constant


● 해결 방법

비트 필드의 크기는 반드시 정수 리터럴 또는 컴파일 타임 상수 매크로로 지정해야 합니다.

#define SIZE 3

struct Flags {
    unsigned int b : SIZE;  // 정수 상수 사용
};

또한 비트 필드의 타입은 int, unsigned int처럼 정수형이어야 하며, 실수형은 사용할 수 없습니다.



● 실전 팁

  • 비트 필드는 반드시 정수형 타입을 사용해야 합니다.
  • 크기(width)는 정수 상수 또는 매크로 상수여야 하며, 변수나 실수는 사용할 수 없습니다.
  • 하드웨어 제어나 프로토콜 구현에 자주 사용되므로 메모리 배치에 주의하여 작성하세요.

비트 필드는 C언어에서 메모리 제어의 세밀한 표현 수단이지만, 문법과 타입 규칙이 엄격하므로 컴파일 타임 상수와 정수형 타입만 사용하도록 주의하세요.