국가별 사용
대부분의 전통적인 C 코드와 C++ 코드에서는 문자 및 문자열 조작이 국가별 응용 프로그램에서 제대로 작동하지 않는다고 가정합니다. MFC와 런타임 라이브러리 모두 유니코드나 MBCS를 지원하지만 여전히 사용자가 수행해야 할 작업이 있습니다. 이 단원에서는 사용자를 안내하기 위해 Visual C++에서 "국가별 사용"의 의미를 설명합니다.
유니코드와 MBCS는 MFC 함수 매개 변수 목록과 반환 형식에 있는 이식 가능한 데이터 형식을 통해 활성화됩니다. 이러한 데이터 형식은 빌드가 _UNICODE 기호를 정의하는지 _MBCS 기호(DBCS를 의미)를 정의하는지에 따라 적절하게 조건부로 정의됩니다. 빌드가 두 기호 중 어떤 기호를 정의하는지에 따라 MFC 라이브러리의 여러 변형이 응용 프로그램에 자동으로 링크됩니다.
클래스 라이브러리 코드는 이식 가능한 런타임 함수와 기타 방법을 사용하여 유니코드나 MBCS 동작이 제대로 수행되도록 합니다.
그러나 사용자도 특정 종류의 국가별 작업을 처리하는 코드를 작성해야 합니다.
두 환경 중 하나에서 이식 가능한 MFC로 만드는 데 사용하는 동일한 이식 가능 런타임 함수를 사용합니다.
두 환경 중 하나에서 _T 매크로를 사용하여 리터럴 문자열과 문자를 이식 가능하도록 만듭니다. 자세한 내용은 Tchar.h의 제네릭 텍스트 매핑을 참조하십시오.
MBCS에서 문자열을 구문 분석할 때에는 주의해야 합니다. 유니코드에서는 주의하지 않아도 됩니다. 자세한 내용은 MBCS 프로그래밍 팁을 참조하십시오.
응용 프로그램에서 ANSI(8비트) 문자와 유니코드(16비트) 문자를 함께 사용할 경우 주의해야 합니다. 프로그램의 어떤 부분에 ANSI 문자를 사용하고 다른 부분에 유니코드 문자를 사용할 수 있지만 동일한 문자열에서 두 가지를 함께 사용할 수는 없습니다.
응용 프로그램에서 문자열을 하드 코딩하지 마십시오. 대신 문자열을 응용 프로그램의 .rc 파일에 추가하여 STRINGTABLE 리소스로 만듭니다. 그러면 소스 코드를 변경하거나 다시 컴파일하지 않고도 응용 프로그램을 지역화할 수 있습니다. STRINGTABLE 리소스에 대한 자세한 내용은 문자열 편집기를 참조하십시오.
참고
유럽 및 MBCS 문자 집합에는 악센트 부호가 있는 글자와 같이 문자 코드가 0x80보다 큰 문자가 있습니다. 대부분의 코드가 부호 있는 문자를 사용하기 때문에 0x80보다 큰 문자는 int로 변환될 때 부호가 확장됩니다. 부호가 확장된 문자는 음수로 처리되어 배열을 벗어나 인덱싱되므로 배열 인덱싱에 문제를 일으킵니다. MBCS를 사용하는 언어(예: 한국어)도 문제의 소지가 있습니다. 문자가 1바이트나 2바이트로 구성될 수 있기 때문에 항상 두 바이트를 동시에 처리해야 합니다.