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

[C언어][Error] 072. conflicting types for typedef – typedef 재정의 오류

by about_IT 2025. 4. 29.

이 오류는 typedef를 통해 정의한 사용자 타입이 동일한 이름으로 서로 다른 타입과 중복 정의되었을 때 발생합니다. C언어에서는 한 번 정의한 typedef 이름에 대해 다시 다른 타입으로 정의하는 것을 허용하지 않으며, 컴파일러는 이를 타입 충돌로 간주하여 오류를 발생시킵니다.


이 오류는 보통 헤더 파일에서 중복 포함 방지 매크로가 없거나, typedef 이름을 재사용하려 할 때 발생합니다.



● 오류 예제

typedef int number;
typedef float number;  // 오류: 같은 이름으로 다른 타입 정의

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

error: conflicting types for ‘number’


● 해결 방법

이미 정의된 typedef 이름을 다시 사용할 수 없기 때문에, 새로운 typedef 이름을 정의하거나 기존 정의를 조건부로 막아야 합니다.

#ifndef _MYTYPE_H_
#define _MYTYPE_H_

typedef int number;  // 첫 번째 정의

#endif

또는 다른 이름을 사용해 충돌을 방지할 수 있습니다.

typedef int number_int;
typedef float number_float;


● 실전 팁

  • typedef는 한 번 정의된 후 동일한 이름으로 재정의하면 오류가 발생합니다.
  • 헤더 파일에서는 include guard 또는 #pragma once를 사용해 중복 정의를 방지하세요.
  • 이름 충돌을 방지하기 위해 접두사(prefix)나 모듈 이름을 활용하세요.

C언어에서 typedef는 코드 가독성과 유지보수를 높여주지만, 이름 중복에 매우 민감하므로 항상 고유한 이름을 사용하고 헤더 보호 매크로를 철저히 적용하는 것이 중요합니다.