κΈ€ μž‘μ„±μž: λ˜₯폴베.
λ°˜μ‘ν˜•
이 ν¬μŠ€νŠΈλŠ”, μœ€μ„±μš° μ €μžλ‹˜μ˜ 'λ‡Œλ₯Ό μžκ·Ήν•˜λŠ” μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°'을 λ°”νƒ•μœΌλ‘œ 제 생각을 μž¬κ΅¬μ„±ν•˜μ—¬ μ •λ¦¬ν•œ ν¬μŠ€νŠΈμž…λ‹ˆλ‹€.

 

이전 포슀트


2019/06/27 - [Development/System] - [μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°] 2. Windowsμ—μ„œμ˜ μœ λ‹ˆμ½”λ“œ(UNICODE)

 

[μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°] 2. Windowsμ—μ„œμ˜ μœ λ‹ˆμ½”λ“œ(UNICODE)

이 ν¬μŠ€νŠΈλŠ”, μœ€μ„±μš° μ €μžλ‹˜μ˜ 'λ‡Œλ₯Ό μžκ·Ήν•˜λŠ” μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°'을 λ°”νƒ•μœΌλ‘œ 제 생각을 μž¬κ΅¬μ„±ν•˜μ—¬ μ •λ¦¬ν•œ ν¬μŠ€νŠΈμž…λ‹ˆλ‹€. λͺ©μ°¨ λ¬Έμžμ…‹μ˜ μ’…λ₯˜μ™€ νŠΉμ„± WBCS 기반의 ν”„λ‘œκ·Έλž˜λ° λ§€κ°œλ³€μˆ˜ μ „λ‹¬μΈμž μœ λ‹ˆμ½”..

cjwoov.tistory.com

 

μ„œλ‘ 


 μ„Έμƒμ— λͺ¨λ“  μ‹œμŠ€ν…œμ΄ μœ λ‹ˆμ½”λ“œλ₯Ό μ§€μ›ν•œλ‹€κ³ ν•˜λ©΄ λ¬Έμ œκ°€ μ—†λ‹€.

ν•˜μ§€λ§Œ μ—¬μ „νžˆ! μœ λ‹ˆμ½”λ“œμ˜ μž₯점, μš©μ΄μ„±λ“€μ΄ μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ™œ MBCSλ₯Ό λͺ»λ²„λ¦¬λŠλƒ?

기쑴에 MBCS κΈ°μ€€μœΌλ‘œ 개발된 ν”„λ‘œκ·Έλž¨κ³Όμ˜ ν˜Έν™˜μ„±, 아직 μœ λ‹ˆμ½”λ“œλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ‚¬μš©μžμ˜ μ‹œμŠ€ν…œ λ“±.. μ—¬λŸ¬ 가지 μ΄μœ κ°€ μžˆλ‹€.

μ„œλ²„ ν”„λ‘œκ·Έλž¨κ³Ό 같은 것을 κ°œλ°œν•œλ‹€κ³  ν•˜λ©΄ 크게 μƒκ΄€μ—†κ² μ§€λ§Œ,

μ΅œμ’… μ—”λ“œν¬μΈνŠΈκ°€ ν΄λΌμ΄μ–ΈνŠΈμΈ κ²½μš°λŠ” MBCS와 WBCSλ₯Ό λ™μ‹œ 지원할 수 μžˆλ„λ‘ ν•΄μ•Ό ν•˜κ³  κ°œλ°œμžλ“€λ„ κ°œλ°œν•  λ•Œ μ΄λŸ¬ν•œ μŠ΅κ΄€μ„ λ“€μ—¬μ•Ό ν•œλ‹€.

 

λͺ©μ°¨


  • windows.h μ•ˆμ—λŠ”?
  • MBCS와 WBCS λ™μ‹œ 지원 맀크둜

 

windows.h μ•ˆμ—λŠ”?


Windows μ •μ˜ μžλ£Œν˜•

typedef char		CHAR;
typedef wchar_t		WCHAR;


// WinString.cpp μ°Έμ‘°
#define CONST		const

typedef CHAR *			LPSTR;
typedef CONST CHAR *		LPSTR;

typedef WCHAR * 			LPWSTR;
typedef CONST WCHAR *		LPCWSTR;

 λ¬΄μ‘°κ±΄ typedef에 μ„ μ–Έ ν•œ λŒ€λ‘œ κΌ­ μ •μ˜λ₯Ό ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

κ·Έ 말은 μ¦‰μŠ¨ μ‹€λ¬΄μ—μ„œ ν•œ νšŒμ‚¬μ— μ—¬λŸ¬ νŒ€μ΄ 있고 각 νŒ€λ³„λ‘œ ν”„λ‘œμ νŠΈλ₯Ό λ‹΄λ‹Ήν•œλ‹€κ³  κ°€μ •ν•˜λ©΄,

ν”„λ‘œμ νŠΈ λ³„λ‘œ 넀이밍을 λ‹¬λ¦¬ν•˜κΈ°λ„ ν•˜κ³  νŒ€λ³„λ‘œ 넀이밍을 λ‹¬λ¦¬ν•˜κΈ°λ„ ν•˜κ³  νšŒμ‚¬λ³„λ‘œ 넀이밍을 λ‹¬λ¦¬ν•˜κΈ°λ„ ν•œλ‹€.

즉 μœ„μ— Windows μ •μ˜ μžλ£Œν˜•μ΄ κΌ­ μ΅œμ„ μ€ μ•„λ‹ˆλΌλŠ” 말이닀. 

즉 μœ„μ™€ 같은 μžλ£Œν˜• 자체λ₯Ό κΈ°μ–΅ν•˜λŠ” 것보닀 μ–΄λ–€ μ‹μœΌλ‘œ 넀이밍을 ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λ €λŠ” 게 μ’‹λ‹€.

 

MBCS와 WBCS λ™μ‹œ 지원 맀크둜


 κ·Έλ ‡λ‹€λ©΄! μ–΄λ–»κ²Œ 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λΌλŠ” 맀크둜 μ•ˆμ— μžˆλ‹€. windows.h νŒŒμΌμ— ν¬ν•¨λ˜μ–΄μžˆλŠ” 것듀인데,

UNICODEλΌλŠ” 단어λ₯Ό μ„ μ–Έν•˜λ©΄ μ „μ²˜λ¦¬κΈ°μ— μ˜ν•΄ 쑰건뢀 컴파일이 μΌμ–΄λ‚˜ μ•„λž˜μ™€ 같이 λ³€ν™˜λœλ‹€.

 

#ifdef _UNICODE
	#define __T(x)	L ## x
#else
	#define __T(x)	x
#endif

#define _T(x)	__T(x)
#define _TEXT(x)	__T(x)

 μœ„도 λ§ˆμ°¬κ°€μ§€λ‹€, 이전 ν¬μŠ€νŠΈμ—μ„œ wchar_t와 L에 λŒ€ν•΄ μ„€λͺ…ν•˜μ˜€λŠ”λ° 그것에 λŒ€ν•œ 선언이닀.

## μ—°μ‚°μ— λŒ€ν•΄ μ„€λͺ…ν•˜μžλ©΄ 문자끼리 λΆ™μ΄λΌλŠ” μ˜λ―Έλ‹€.

예λ₯Ό λ“€μ–΄, __T("ABC")라 μ„ μ–Έν•˜λ©΄ L"ABC"와 κ°™μ΄ μΉ˜ν™˜λœλ‹€.

 

[예제 1]

#define UNICODE
#define _UNICODE

int wmain(void)
{
	TCHAR str[] = _T("1234567");
	int size = sizeof(str);
	printf("string length: %d \n", size);
	return 0;
}
string length: 16

 μœ„μ˜ κ²°κ³ΌλŠ” μœ λ‹ˆμ½”λ“œ 맀크둜λ₯Ό μ •μ˜ν•΄μ€€λ‹€λ©΄ 문자λ₯Ό 2byte둜 ν•΄μ„ν•˜μ—¬

1234567 -> (문자 7개 + NULL문자 1개) * 2 = 16μ΄λΌλŠ” κ²°κ³Όκ°€ 좜λ ₯λœλ‹€.

 

#ifdef _UNICODE
	#define		_tmain	wmain
	#define		_tsclen	wcslen
	#define		_tprintf	wprintf
	#define		_tscanf	wscanf
#else
	#define		_tmain	main
	#define		_tmain	strlen
	#define		_tmain	printf
	#define		_tmain	scanf
#endif

μœ„μ™€ 같은 λ§€ν¬λ‘œλ„ windows.h에 μ •μ˜λ˜μ–΄μžˆλŠ”λ°, 이것은 무엇을 μ˜λ―Έν•˜λŠλƒ ν•˜λ©΄ μ•žμœΌλ‘œ μš°λ¦¬λŠ” mainν•¨μˆ˜μ™€ 같은 것듀을 μ •μ˜ν•  λ•Œ main으둜 wmain으둜 μ“Έ 것이냐 κ³ λ―Όν•  ν•„μš” 없이 _tmain을 μ‚¬μš©ν•˜λ©΄ MBCS와 WBCS λͺ¨λ‘ 지원이 되기 λ•Œλ¬Έμ— μœ„μ™€ 같은 맀크둜λ₯Ό ν™œμš©ν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ—¬ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것이 μ’‹λ‹€.

λ°˜μ‘ν˜•