Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- constructor
- vector size
- delete function
- base from member
- C++
- return by reference
- new&delete
- increment operator
- std::ostream
- c++ multi chatting room
- virtual inheritance
- virtual destructor
- member function pointer
- operator overloading
- c++ basic practice
- std::cout
- virtual function
- std::endl
- vector capacity
- conversion constructor
- 더 지니어스 양면포커
- dynamic_cast
- diamond inheritance
- pointer to member data
- placement new
- suffix return type
- this call
- virtual function table
- std::vector
- discord bot
Archives
- Today
- Total
I'm FanJae.
[SYSTEM PROGRAMMING] MBCS와 WBCS 동시 지원 본문
1. MBCS와 WBCS 동시지원
1-1. 동시 지원의 필요성과 Windows 스타일 자료형
- 프로그램 구현시 여러 측면을 고려해야한다.
- 기존 개발된 프로그램과의 호환성 및 사용자 시스템에서 지원하지 못하는 경우로 인해 유니코드로만 동작 시킬 수 없다.
typedef char CHAR;
typedef wchar_t WCHAR;
#define CONST const;
typedef CHAR * LPSTR;
typedef CONST CHAR * LTCSTR;
typedef WCHAR * LPWSTR;
typedef CONST WCHAR * LPCWSTR;
- Windows에서는 typedef 키워드를 통하여 몇몇 기본 자료형에 Window 스타일의 새로운 이름을 정의하고 있다.
- 이는 WinString.cpp안에 모두 있다.
#include <stdio.h>
#include <windows.h>
int main(int argc, wchar_t* argv[])
{
LPSTR str1 = "SBCS Style String 1";
LPWSTR str2 = L"WBCS Style String 1";
CHAR arr1[] = "SBCS Style String 2";
WCHAR arr2[] = L"WBCS Style String 2";
LPCSTR cStr1 = arr1;
LPCWSTR cStr2 = arr2;
printf("%s\n", str1);
printf("%s\n", arr1);
wprintf(L"%s\n", str2);
wprintf(L"%s\n", arr2);
return 0;
}
- 이와 같은 형태로 되어있다.
- 코드 자체는 복잡하지 않아서 이해하는데 무리가 없다.
2. MBCS와 WBCS 동시 지원 매크로
#ifdef _UNICODE
typedef WCHAR TCHAR;
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef CHAR TCHAR;
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
- _UNICODE가 정의되어 있는가 정의 되어있지 않은가로 판단하는 것이다.
- _UNICODE가 정의되어 있지 않다면
TCHAR arr[10];은 -> CHAR arr[10] -> char[10]; 순으로 바뀐다.
#ifdef _UNICODE
#define __T(x) L ## x
#else
#define __T(x) x
#endif
#define _T(x) __T(x)
#define _TEXT(x) __(x)
- 유니코드가 정의되어 있을때 L ## x 부분은 -> __T("ABC")라고 할때 이를 -> L"ABC"와 같은 형태로 바꾸어준다.
- 유니코드 지원여부에 따라서 다음과 같이 처리가 가능하다.
'System Programming' 카테고리의 다른 글
[System Programming] 프로그램 구현 관점에서 64비트 기반 프로그래밍 / 오류의 확인 (0) | 2024.09.11 |
---|---|
[SYSTEM PROGRAMMING] WIN32와 WIN64 (0) | 2024.09.09 |
[System Programming] Windows 에서의 유니코드 (1) | 2024.08.30 |
[System Programming] 프로그램의 실행과정 / 하드웨어 구성의 재접근 (0) | 2024.08.26 |
[System Programming] 시스템 프로그래밍의 이해와 접근 (0) | 2024.08.25 |
Comments