728x90
이 오류는 sizeof
연산을 사용할 때, 그 대상이 컴파일 시점에 크기를 알 수 없는 불완전한 타입(incomplete type)일 경우 발생합니다. C언어에서 sizeof
는 메모리 크기를 계산하는 연산이므로, 대상의 크기를 컴파일 타임에 알아야만 정상적으로 처리할 수 있습니다.
주로 구조체나 typedef 타입을 선언만 하고 정의하지 않은 상태에서 sizeof
를 사용할 때 발생합니다.
● 오류 예제
typedef struct Node Node;
int main() {
printf("%zu", sizeof(Node)); // 오류 발생
return 0;
}
위 코드에서는 Node의 크기를 알 수 없기 때문에 컴파일러는 오류를 발생시킵니다.
error: invalid application of ‘sizeof’ to incomplete type ‘Node’
● 해결 방법
sizeof 연산에 사용하는 타입은 반드시 완전하게 정의되어야 합니다. 구조체 정의가 포함되어 있는지 확인하고, 누락된 경우 정의를 추가해야 합니다.
typedef struct Node {
int data;
} Node;
int main() {
printf("%zu", sizeof(Node)); // 정상 실행
return 0;
}
출력 결과:
4
● 실전 팁
sizeof
는 컴파일 타임에 크기를 알 수 있는 완전한 타입에만 사용할 수 있습니다.- 전방 선언만 존재하는 구조체나 typedef 타입에는 사용하지 말고, 정의가 포함되어 있는지 확인하세요.
- 헤더 파일을 나누어 작성할 경우 typedef 선언만 있고 정의가 없는 경우가 있으니 include 순서를 점검하세요.
C언어는 sizeof
연산을 통해 정적 메모리 크기를 계산하기 때문에, 항상 정의가 완료된 타입을 대상으로만 사용해야 오류 없이 컴파일이 가능합니다. 구조체 정의를 먼저 확인하는 습관을 가지세요.
728x90