2010-08-18 5 views
4
#define NAME(x) TEXT(x) 
#define TEXT(quote) __TEXT(quote) // r_winnt 
#define __TEXT(quote) quote   // r_winnt 

위는 winnt.h에서 가져온 것이고 NAME("Virtual Cam")"Virtual Cam"과 동일하지 않으므로이 매크로를 사용하는 것이 무엇입니까?매크로의 종류는 무엇입니까?

답변

4

__TEXTUNICODE 플래그가 정의되었는지 여부에 따라 매크로 확장이 선택됩니다. 그렇지 않다면 quote으로 확장하고 다른 경우 을 따옴표에 추가하여 L"Virtual Cam"이되도록합니다. 이 문자열은 넓은 char 문자열로 해석됩니다.

+0

''L '은''L "입니다. 가상 캠"'C++의 원시 구문이거나 일부 헤더 파일에 정의되어 있습니까? – user198729

+0

나는 wchar_t * pwstr = L "Test"를 쓸 수 있기 때문에 네이티브 C++ 코드라고 생각한다; –

+1

C++ ISO 표준은 wchar_t를 C 네이티브로 referes합니다. 그래서 L은 C++ 네이티브 코드가 아니라 C 네이티브 코드입니다 .-) –

1

시스템이 유니 코드를 사용하도록 # 정의되어 있는지 여부에 따라 다릅니다. 그러면 자동 리터럴이 char 리터럴 대신 넓은 리터럴로 변경됩니다.

+2

하지만 위의 논리는 보이지 않지만 어떻게됩니까? – user198729

+0

"유니 코드 사용"은 Microsoft 도구 및 API에서 가장 잘 지원되는 유니 코드 인코딩이므로 "UTF-16 인코딩 유니 코드 사용"을 의미합니다. –

관련 문제