완전한 유니코드 기반으로 : 두 번째
WBCS2.cpp 는 완전한 유니코드 기반 예제가 아니다
#include <stdio.h>
int main(int argc, char* argv[])
{
int i;
for (i=0; i < argc; i++)
{
fputws(argv[i], stdout);
}
return 0;
}
10번째 줄에서 컴파일 에러발생
wchar_t* argv[] 로 바꾸면 어떨까
엉뚱한 출력결과를 보일 뿐이다 main 이라는 이름의 함수는 MBCS기반이기 때문이다
그래서 wmain 을 사용해야함
#include <stdio.h>
int wmain(int argc, wchar_t* argv[])
{
for (int i=1; i < argc; i++)
{
fputws(argv[i], stdout);
fputws(L"\n", stdout);
}
return 0;
}
wmain 은 파라미터를 유니코드로 받는다
MBCS와 WBCS의 동시지원
#include <windows.h>
windows기반 프로그래밍에 항상 포함해야하는 헤더파일
CHAR, WCHAR 이 windows.h에 정의되어 있다
Windows에서 정의하고 있는 자료형
typedef char CHAR;
typedef wchar_t WCHAR;
#define CONST const
typedef CHAR * LPSTR;
typedef CONST CHAR * LPCSTR;
typedef WCHAR * LPWSTR;
typedef CONST WCHAR * LPCWSTR;
Windows 스타일 자료형 사용이유
긴 문장대신 간결함
확장성의 용이성
#include <stdio.h>
#include <windows.h>
int wmain(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;
}
SBCS Style String 1
SBCS Style String 2
WBCS Style String 1
WBCS Style String 2
cpp로는 위 코드가 오류난다. c언어로는 오류 안남