프로그래밍언어/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언어에서 메모리 제어의 세밀한 표현 수단이지만, 문법과 타입 규칙이 엄격하므로 컴파일 타임 상수와 정수형 타입만 사용하도록 주의하세요.