wchar_t 옵션

@codemaru · July 30, 2010 · 2 min read

Visual C++의 옵션에 보면 wchar_t를 내장 타입으로 지정할지 말지 결정하는 옵션이 있다(C/C++ -> Language 부분에 있음). 보통 내장타입으로 사용되는데 종종 내장타입으로 사용하지 않는 경우가 있다. 다른 회사에서 … 그럴 때 소스를 제공할 때에 wchar_t를 사용하면 에러가 발생한다. 타입을 별도로 지정해야 한다면 unsigned short로 지정해서 줘야 한다. 근데 또 욱긴건 unsigned short로 지정하면 내장 타입으로 사용하도록 한 경우에 wchar_t랑 호환이 되지 않는다. 한마디로 x같은 상황이 연출된다. 그렇다면 벤더에 소스를 공급해야 하고, 소스에는 wchar_t를 써야 하고, 벤더의 컴파일 옵션과는 상관없이 우아하게 컴파일되게 하고 싶을 때 어떻게 하면 될까?

음. 여러가지 방법이 있을 수 있겠지만 첫 번째 방법은 __wchar_t 타입을 사용하는 것이다. 이 타입은 해당 옵션에 상관없이 항상 정의된다. 다른 방법으로는 Visual C++ 옵션을 전처리기로 탐지하는 방법이 있다.

#ifdef \_NATIVE\_WCHAR\_T\_DEFINED  

typedef wchar\_t mywchar\_t;  

#else  

typedef unsigned short mywchar\_t;  

#endif

맞다. 결국 wchar.h를 포함하고 wchar_t를 사용하면 된다. wchar.h를 따라 들어가면 위와 같은 전처리기 문장이 crtdefs.h에 정의되어 있다. 그런데 문제는 그 wchar.h를 특정 네임스페이스에서 인클루드하는 요상한 분들도 계신다는 점이다. 즉, 우리가 만드는 거 외에는 모든 것이 다 존재할 수 없다고 가정하고 작성해야 한다면 저런 코드를 사용하는게 정신 건강에 좋다.

이 wchar_t 옵션에 관한 자세한 설명은 아래 페이지에 아주 상세히 설명되어 있다.

http://msdn.microsoft.com/en-us/library/dh8che7s(VS.71).aspx

 3  0

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중