typedef로 이미 선언이 되었는지 확인하는 방법이 있나요?

superkkt의 이미지

#define ABC    1234

#ifndef ABC
#define ABC    1234
#endif

이게 typedef에도 똑같이 적용될줄 알았는데 안되는군요..

typedef  unsigned char     uint8_t

#ifndef  uint8_t
typedef  unsigned char     uint8_t
#endif

컴파일하니 이미 선언되었는데 다시 선언한다고 경고가 나오네요.. typedef로 선언된 내용은 저런식으로 확인할 수 없는건가요?

cinsk의 이미지

안타깝게도 typedef name이 이미 정의되어 있는가 여부를 판단할 방법은 존재하지 않습니다.

보통 open source software들은 configure script에서 그 타입의 변수를 선언한 간단한 .c 파일을 컴파일해보고 에러 여부에 따라서 특정 매크로를 정의해 둡니다. 예를 들면 이런식입니다.

uint64_t가 정의되어 있는지 여부를 결정하고 여기에 따라 매크로 HAVE_UINT64_T를 정의합니다. 비슷한 형태로 HAVE_* 꼴의 매크로를 정의해서 쓰기도 합니다.