수색…


소개

하나 이상의 문자열 을 인수로 취하는 함수의 Windows API 설명서는 일반적으로 다음과 같습니다.

BOOL WINAPI CopyFile(
  _In_ LPCTSTR lpExistingFileName,
  _In_ LPCTSTR lpNewFileName,
  _In_ BOOL    bFailIfExists
);

두 개의 문자열 매개 변수에 대한 데이터 유형은 여러 부분으로 구성됩니다.

  • LP = 긴 포인터
  • C = const
  • T = TCHAR
  • STR = 문자열

TCHAR 은 무엇을 의미합니까? 이것은 프로그램 컴파일을 위해 선택한 플랫폼에 따라 다릅니다.

CopyFile 자체는 다음과 같이 정의 된 매크로 일뿐입니다.

#ifdef UNICODE
#define CopyFile CopyFileW
#else
#define CopyFile CopyFileA
#endif

따라서 실제로 두 개의 CopyFile 함수가 있고 컴파일러 플래그에 따라 CopyFile 매크로가 하나 또는 다른 것으로 해결됩니다.

코어 토큰 인 TCHAR 는 다음과 같이 정의됩니다.

#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

다시 컴파일 플래그에 따라 TCHAR은 "narrow"또는 "wide"(2 바이트) 문자입니다.

UNICODE가 정의 될 때, CopyFile 로 정의 CopyFileW UTF-16 인코딩 할 것으로 예상되는 파라미터들이, 2- 바이트 문자 배열을 사용한다.

UNICODE가 정의되지 않은 경우, CopyFile 로 정의된다 CopyFileA 현재 사용자의 기본 ANSI 인코딩으로 인코딩 될 것으로 예상되는 단일 바이트 문자 어레이를 사용한다.

두 가지 유사한 매크로가 있습니다. UNICODE 는 Windows API에 넓은 문자열이 필요하고 _UNICODE ( _UNICODE 밑줄이 있음)를 사용하여 C 런타임 라이브러리에서 유사한 기능을 사용할 수있게합니다.

이러한 정의에 따라 ANSI 및 유니 코드 모드로 컴파일되는 코드를 작성할 수 있습니다.

utf-8은 불행하게도 잘 지원되지 않지만 ANSI 인코딩은 싱글 바이트 인코딩 (즉, 라틴 -1)과 멀티 바이트 인코딩 (즉, 시프트 jis) 일 수 있다는 것을 아는 것이 중요합니다.

즉, ANSI 또는 이러한 함수의 와이드 문자 변형은 고정 너비 인코딩으로 작동하지 않을 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow