LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR, LPCWSTR 의미

A Code AM·2020년 3월 31일
0

수업(20200212~)

목록 보기
4/12

C와 C++은 string이라는 자료구조형을 compiler 차원에서 지원하지 않음

대신 배열의 끝에 \0 / 0 / NULL값을 넣어서 string을 표현하도록 처리함.

Windows에서는 이런 string처리를 위해 char*형을 그대로 쓰기보다 LPCSTR등의 표현으로 대치해 사용

LP : long pointer의 약어 > 16bit 시절 윈도우의 유산
windows3.1까지의 시절에 포인터는 모두 16bit였고 24bit메모리를 long pointer라는 것을 통해 extended memory라는 이름으로 관리했으나 현재 LP는 .Net에서는 64bit pointer를, VC++6.0과 그 이전 버전에서는 32bit pointer를 나타낸다

C는 constant, 즉 함수 내부에서 인자값 변경 하지 말라는 뜻

STR은 말그대로 string자료가 될 것이라는 뜻. 내부적으로는 char형 배열에 null값 종료 의미

W는 wide char = unicode
win9x에서 사용하던 multibyte랑은 다름.

LPSTR = long pointer string = char
LPCSTR = long pointer constant string = const char

LPCTSTR = long pointer constant t_string = const tchar
LPWSTR = long pointer wide string = w_char

LPCWSTR = long pointer constant wide string = const w_char *

t_char ??
: 마이크로소프트가 각각의 언어에 맞게 windows를 unicode 기반으로 개발한 것

char = 1Byte, wide char = 2Byte로
포인터 연산을 많이하는 C, C++ 호환성에 치명적 문제가 있음
그래서 compiler가 precompile option을 보고 환경에 맞게 동작하는 코드를 작성할 수 있는 새로운 변수 모양의 Macro 선언 한 것이 TCAHR, t_char이라는 변수

자신의 운영체제가 multi-byte환경이면 char형으로, unicode 환경이면 w_char, wide char 형으로 type casting된다

그래서 windows 9x, 2000계열이면

LPTSTR = LPSTR = char*
LPCTSTR = LPCSTR = const char* 
profile
배움기록

0개의 댓글