이 오류는 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는 코드 가독성과 유지보수를 높여주지만, 이름 중복에 매우 민감하므로 항상 고유한 이름을 사용하고 헤더 보호 매크로를 철저히 적용하는 것이 중요합니다.