WSP06

LJM·2023년 7월 11일
0

컴퓨터지식

목록 보기
7/41

완전한 유니코드 기반으로 : 두 번째

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언어로는 오류 안남

profile
게임개발자 백엔드개발자

0개의 댓글