[MFC] LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 의 의미
- 카테고리 없음
- 2017. 5. 1. 20:29
MFC로 프로그램을 개발하다보면 LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 와 같은 자료형을 자주 마주하게 될 것인데, 이 자료형들을 읽는 데는 일정한 규칙이 있습니다.
LP : long pointer (16bit 윈도우의 유산, windows3.1까지는 포인터는 모두 16bit 였고 24bit 메모리를 long pointer라는 것을 통해 관리)
C : constant
STR : string자료가 될것이라는 뜻으로 내부적으로는 char형 배열에 null값 종료를 의미
이 규칙을 적용하면
LPSTR -> long pointer string = char *
LPCSTR -> long pointer constant string = const char*
가 됩니다.
그리고,
LPCWSTR -> long pointer constant wide string = const w_char *
LPWSTR -> long pointer wide string = w_char *
가 되는 데 여기서 w_char는 unicode를 나타냅니다.
또한 T가 들어가 있는 자료형을 보실 수 있는 데 이것은,
LPCTSTR -> long pointer constant t_string = const t_char *
로 읽고 이 t_char는 컴파일러가 precompile option을 보고, 환경에 맞게 동작하는 코드를 작성할 수 있도록 하는 변수 모양의 매크로입니다.
이 자료형이 나타난 배경은 마이크로소프트가 unicode기반으로 개발을 진행하게 되면서 C, C++의 포인터 연산 시 발생하는 호환성 문제를 해결하기 위해만들어진 것이죠. 즉 운영체제가 multi-byte환경이면 char로 unicode환경이면 w_char로 type casting이 됩니다.
따라서 현재 windows 8.1이상을 쓰는 현재로써는
LPCTSTR -> long pointer constant t_string = const t_char * = const char*가 됩니다.
이 글을 공유하기