728x90
이 오류는 extern
으로 선언된 전역 변수의 타입이 실제 정의와 일치하지 않을 때 발생합니다. C언어에서 extern
은 다른 파일에 정의된 전역 변수를 참조하기 위해 사용되며, 선언과 정의의 타입이 반드시 일치해야 합니다. 만약 크기, 포인터 여부, signed/unsigned 등이 다르면 컴파일러는 타입 충돌로 인식합니다.
이 오류는 보통 헤더 파일과 구현 파일 간 타입 불일치, 혹은 선언 시 실수로 타입을 잘못 명시한 경우에 발생합니다.
● 오류 예제
// file1.c
int count = 10;
// file2.c
extern float count; // 오류: 타입 불일치
컴파일 시 다음과 같은 오류 메시지가 출력됩니다.
error: conflicting types for ‘count’
● 해결 방법
extern
선언은 정의와 동일한 타입으로 작성되어야 하며, 이를 일관되게 유지해야 합니다. 보통 공통 헤더 파일을 통해 선언을 관리하는 것이 좋습니다.
// common.h
extern int count;
// file1.c
#include "common.h"
int count = 10;
// file2.c
#include "common.h"
void printCount() {
printf("%d\n", count);
}
● 실전 팁
extern
선언은 변수 정의와 타입이 완전히 일치해야 합니다.- 모든 파일에서 동일한 헤더 파일을 사용하면 선언 일관성을 유지할 수 있습니다.
- 정의와 선언이 일치하지 않으면 링커 오류 또는 컴파일 오류가 발생할 수 있습니다.
C언어는 타입에 민감한 언어이므로, extern을 사용할 때는 항상 정의와 일치하는 타입으로 선언해야 하며, 공통 헤더를 활용하여 일관성을 유지하는 것이 중요합니다.
반응형