티스토리 뷰
변수 명명법
cb
Count of Bytes
바이트 수
dw
double word
long형 정수
h
handle
핸들
sz
Null Terminated NULL
종료 문자열
ch
Character
문자형
a
Array
배열
w
Word
부호없는 정수형
i
integer
정수형
p,lp
long pointer
포인터형
b
Bool
논리형
핸들이란?
정수값 대부분의 경우 32비트값.
운영체제가 발급하며 사용자는 쓰기만 한다.
같은 종류의 핸들끼리는 절대로 중복된 값을 가지지 않는다.
정수형이므로 값을 가지겠지만 그 실제값이 무엇인지는 몰라도 상관없다.
유니코드 16비트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계.
C언어의 타입을 바로 쓰지 말고 유니코드 설정에 따라 변경되는 중간 타입을 사용.
C타입 | 유니코드 타입 |
char | TCHAR |
char* | LPSTR |
const char* | LPCTSTR |
유니코드로 컴파일 할때는 wchar_t 타입이 된다. 실제로 unsigned short로 정의 . 부호없는 16비트 정수형.
TCHAR 타입의 실제 정의문
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
C 표준함수 | 유니코드 지원함수 |
strlen | lstrlen |
strcpy | lstrcpy |
strcat | lstrcat |
strcmp | lstrcmp |
sprintf | wsprintf |
TCHAR* str="string";
TCHAR* str=TEXT("string"); // 이렇게 쓰는게 좋다. 유니코드 설정에 따라 문자열 상수의 타입 변경
_PTR이 붙은 타입은 운영제체의 비트수에 따라 크기가 가변적이며 포인터와 같은 길이를 가짐. 포인터와 호환되어야 하는 정수 필요시는 이 타입을 사용 int대신 INT_PTR.
[출처] WinAPI 1장 명명법 유니코드 타입|작성자 플그래머
원문보기: http://www.itka.kr/zbxe/?mid=debugprog&page=1&document_srl=1051
유니코드는 16비트의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자 코드 체계이다. 유니코드의 등장 배경과 내부적인 구성 원리 등의 자세한 사항에 대해서는 다음에 따로 상세하게 다루되 여기서는 준비만 해 두자. 유니 코드를 지원하려면 문자형이나 문자열에 대해 C언어의 타입을 바로 쓰지 말고 유니코드 설정에 따라 변경되는 중간 타입을 사용한다. C언어에 익숙한 사람들은 앞으로 문자나 문자열을 표현할 때 다음 타읍들을 쓰도록하자
C 타입 |
유니코드 타입 |
char |
TCHAR |
char |
LPSTR |
const char* |
LPCTSTR |
TCHAR는 C의 기본 타입 중 하나인 char와 일단 같지만 유니코드로 컴파일할 때는 wchar_t타입이 된다. Wchar_t는 실제로는 unsigned short 로 정의 되어 있으며 부호없는 16비트 정수형이다. TCHAR타입의 실제 정의문은 다음과 같이 조건부 컴파일문으로 작성되어 있다.
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
char를 바로 쓴 소스는 유니코드로 바꿀 때 일일이 소스를 뜯어 고친 후 다시 컴파일해야 하지만 TCHAR라는 중간 타입을 사용한 소스는 프로젝트 설정에 따라 소스도 같이 바뀌는 효과가 있으므로 소스는 그대로 두고 컴파일만 다시 하면 된다. 문자열이 필요할 때도 char *를 쓰지 말고 가급적이면 LPSTR또는 TCHAR*를 쓰는 것이 현명하다.
C 표준 함수 |
유니코드 지원 함수 |
strlen |
lstrlen |
strcpy |
lstrcpy |
strcat |
lstrcat |
strcmp |
lstrcmp |
sprintf |
wsprintf |
Strlen은 char타입의 문자열 길이만 조사하지만 lstrlen은 TCHAR타입의 묹열에 대해서도 동작하므로 이식에 훨씬 더 유리하다. 문자열 상수도 타입이 있으므로 겹 따옴표안에 바로 문자열 상수를 쓰지 말고 TEXT 매크로로 둘러 싸는 것이 좋다.
TCHAR *str=”string”; //이렇게 쓰지 말고
TCHAR *str=TEXT(“string”); //TEXT 메크로 안에 문자열 상수를 쓴다.
TEXT 메크로는 유니코드 설정에 따라 문자열 상수의 타입을 변경한다. 유니코등로 컴파일할 때는 각 문자가 16비트의 유니코드 문자가 되며 그렇지 않을 때는 8비트의 안시 문자가 된다.http://cking4w.tistory.com/234 에서펌
char 형태 선언 할 때
유니코드는 WCHAR로 하며 WCHAR는 typedef wchar_t WCHAR; 이다.
멀티바이트는 그냥 char을 사용한다.
winnt.h에 정의되어있는 매크로에 의해
무조건 TCHAR로 하면 자동으로 유니코드/멀티바이트를 판단하여 컴파일 한다.
TCHAR로 하는게 안전~!
아, 참고로 TextOut을 쓸 때 strlen 안먹힌다고 징징거리지 말자.
유니코드에서는 lstrlen으로 해야한다.
'Language > C C++' 카테고리의 다른 글
c에서 파일 입출력 쉽게 하기 (0) | 2010.06.04 |
---|---|
헤더에서 컴파일러 구분하기 (0) | 2010.04.27 |
함수 이름 앞에 ::가 붙는 경우 (0) | 2010.04.07 |
extern "C"와 function overload (0) | 2009.09.02 |
구조체 포인터에 관하여 (0) | 2008.12.09 |
미리 컴파일된 헤더 - PCH 에러 해결법 (0) | 2008.12.09 |
함수로 배열 리턴 받는 방법 (2) | 2008.12.09 |
여러개의 c파일에서 변수 끌어다 쓰기 (0) | 2008.12.08 |
- Total
- Today
- Yesterday
- android
- jni강좌
- Troubleshooting
- gcc
- Quiz
- database
- it
- winapi
- java
- linux
- jni
- Visual C++
- MFC
- AWS
- Python
- db
- API
- C
- kering
- 리눅스
- 드라이버
- NDK
- source
- 음악
- driver
- C++
- 안드로이드
- 프로그래밍
- algorithm
- Cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |