본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 098. conflicting types for extern variable – extern 변수와 정의 충돌

by about_IT 2025. 5. 10.
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을 사용할 때는 항상 정의와 일치하는 타입으로 선언해야 하며, 공통 헤더를 활용하여 일관성을 유지하는 것이 중요합니다.

반응형