windows는 MBCS와 WBCS를 모두 사용가능한 프로그램 구현을 위해 매크로를 정의하고 있다.
#ifdef UNICODE
typedef WCHAR TCHAR;
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef CHAR TCHAR;
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
아래는 windows.h에 포함되지 않는 tchar.h 에 선언된 일부이다.
#ifdef _UNICODE
#define __T(x) L##x
#else
#define __T(x) x
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
ex)
TCHAR arr[10];
위 선언이 되어 있고 UNICODE 매크로가 정의되어 있지 않다면 CHAR arr[10];이다.
UNICODE 매크로가 정의되어 있다면 WCHAR arr[10];이다.
매크로 UNICODE가 정의되어있다면
TCHAR arr[10]; -> WCHAR arr[10]; -> wchar_t arr[10];
매크로 UNICODE가 정의되어 있지 않다면
TCHAR arr[10]; -> WCHAR arr[10]; -> char arr[10];
ex)
__T("ABCDE");
위. 선언이 있고 _UNICODE 매크로가 정의되어 있지 않다면, MBCS타입 문자열로 변경된다.
"ABCDE"
_UNICODE 매크로가 정의되어 있다면 WBCS기반의 문자열이 된다.
L"ABCDE"
매크로 _UNICODE가 정의되면
_T("ABCDE") -> __T("ABCDE") -> L"ABCDE"
매크로 _UNICODE가 정의되어 있지 않다면
_T("ABCDE") -> __T("ABCDE") -> "ABCDE"
MBCS와 WBCS(유니코드)를 동시에 지원하기 위한 함수들
tchar.h에 있는 MBCS, WBCS매크로
#ifdef _UNICODE
#define _tmain wmain
#define _tcslen wcslen
#define _tcscat wcscat
#define _tcscpy wcscpy
#define _tcscmp wcscmp
#define _tprintf wprintf
#define _tscanf wscanf
#define _fgetts fgetws
#define _fputts fputws
#else
#define _tmain main
#define _tcslen strlen
#define _tcscat strcat
#define _tcscpy strcpy
#define _tcscmp strcmp
#define _tprintf printf
#define _tscanf scanf
#define _fgetts fgets
#define _fputts fputs
#endif
printf("string length : %d \n", size);
위 문장은 MBCS기반으로 컴파일된다. 유니코드기반으로 컴파일하기 위해선 아래처럼 바꿔야 한다.
wprintf(L"string length : %d \n",size);
MBCS, WBCS기반으로 _UNICODE 정의에 따라 달라지는 함수들의 선언이 tchar.h에 선언되어 있다.
'Programming > Windows System Programming' 카테고리의 다른 글
컴퓨터 구조의 접근방법 (0) | 2020.05.25 |
---|---|
64비트 기반 프로그래밍 (0) | 2019.11.20 |
아스키 코드, 유니코드 (0) | 2019.08.11 |
버스(Bus) 시스템 (0) | 2019.08.07 |
프로그램의 실행과정 및 하드웨어 구성의 재접근 (0) | 2019.08.07 |