Reference : 

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

http://egloos.zum.com/pelican7/v/1768951

자료형의 크기

http://dev.likejazz.com/post/69840022906/long과 int는 크기가 같은데 왜 존재하나요?


위 출처를 중심으로 구글링하여 아래 요약했다.


C Data Types


#include <windows.h>
CHAR : char (typedef 녹색)
SHORT : short
LONG : long
LONGLONG : long long
INT : int
FLOAT : float
DOUBLE : double
VOID : void (define이라 보라색)
CONST : const (보라색)

> C
CHAR -> char
LPSTR -> char*
LPCSTR -> const char*

//wide character. 16-bit UNICODE character
WCHAR -> wchar_t
LPWSTR -> wchar_t*
LPCWSTR -> const wchar_t*

example : 
wchar_t*str1 = L"\x0041";
wchar_t*str2 = L"AAA";
wchar_t*str3 = L"가가가";
wchar_t 형은 문자열에 L 접두사를 붙임으로써 사용할 수 있다.

> C++
String
CString

LP : Long Pointer. 현재 VC++에서 32-bit pointer 의미. 과거 16-bit pointer, .Net에서 64-bit pointer.
TCHAR : MS가 각국 언어에 맞추어 개발하는 것에서 환멸을 느끼다가 windows를 unicode로 개발하는 작업에 착수했다.
이 때 char는 1 byte, wide char는 2 bytes인 것에서 포인터 연산이 많은 C, C++에서 호환성 문제가 발생했다.
이를 해결하기 위해 생긴 것이 TCHAR!
헤더는 TCHAR.h입니다.
TCHAR 또는 _TCHAR은 OS가 multi-bytes 환경이면 char 형, unicode 환경이면 wide char 형으로 type casting 된다.
_T 매크로를 통해 TCHAR로 나타낼 수 있다.
_T('A') / _T("ssaemo")

_tmain 또한 유니코드 정의 유무에 따라 main, wmain이 된다.

size_t : pointer size. 32-bit에서는 부호없는 32-bit 정수. 64-bit에서는 부호없는 64-bit 정수.
ssize_t : signed size_t

자료형
char, short, int, long, long long, float, double 등 다양한 자료형이 있다.
우리는 익히 char=1, int=4로 알고 있지만, 표준에 의하면
간단하게 요약해 char 형은 최소 8 bit, int 형은 최소 16 bit, long 형은 최소 32 bit라고 정의되어 있다.
핵심은 최소이다. int가 최소 32 bit도 아니고 최소 16 bit이다.
long 형은 windows에서 x86이든 x64든 32 bit integer다. 그러나 linux에서는 32 bit이기도, 64 bit이기도 하다.
이런 점에서 리눅스<->윈도우에서 호환성 문제가 발생하기 때문에 long 형은 사용하지 않는 것을 권장한다. 리눅스 내에서만 해도 호환성 문제가 발생한다.

이와중에 size_t 형은 OS의 비트 수에 따라 일관적으로 변한다.

만약, 플랫폼에 따라 자료형의 크기가 변하는 것을 막고 싶다면 아래의 자료형을 사용하자.
#include <stdint.h>
int8_t ~ int64_t

uint8_t ~ uint64_t



그리고 마지막!

#include <windows.h>

DWORD = unsigned long;

QWORD는 거의 안쓰임.


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/