각각의 앞에 L을 넣지 않고 C ++에서 넓은 문자 리터럴을 사용하는 방법

StackOverflow https://stackoverflow.com/questions/260125

  •  06-07-2019
  •  | 
  •  

문제

당신은 내 무지를 용서해야하지만, 나는 C ++에서 넓은 문자 세트를 사용하는 데 익숙하지 않지만, 각 문자 그대로 L을 넣지 않고 C ++에서 넓은 문자리 리터럴을 사용할 수있는 방법이 있습니까?

그렇다면 어떻게?

도움이 되었습니까?

해결책

아니요, 없습니다. 유니 코드를 위해 컴파일 될 때 L 접두사 (또는 _t (예 : _t)와 같은 매크로를 사용해야합니다).

다른 팁

새로운 C ++ 0X 표준은이 작업을 수행하는 다른 방법을 정의합니다.
http://en.wikipedia.org/wiki/c%2B%2B0X#New_string_Literals

관련 메모에 .. 다음을하려고합니다

#define  get_switch( m )   myclass::getSwitch(L##m)

이는 매크로입니다

get_switch(isrunning)

~ 안으로

myclass::getswitch(L"isrunning")

이것은 C ++ VisualStudio 2008에서 잘 작동합니다

그러나 Mac Xcode (iPhone의 경우)에서 동일한 코드를 컴파일하면 오류가 발생합니다.

error: 'L' was not defined in this scope.

편집 : 솔루션

#define  get_switch( m )   myclass::getSwitch(L ## #m)

VC ++ 및 MAC Xcode (GCC) 모두에서 작동합니다.

왜 l로 문자열 문자를 접두사하고 싶지 않습니까? 매우 간단합니다 - l이없는 줄은 ANSI 줄입니다 (const char*), L을 가진 문자열은 넓은 문자열입니다 (const wchar_t*). 거기에 있습니다 TEXT() 현재 프로젝트에 따라 문자열을 ANSI 또는 광범위한 문자열로 만드는 매크로를 사용하지 않도록 설정되어 있습니다.


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

또한 있습니다 _T() 매크로 TEXT().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top