핵궁금;;
궁금한데 tmain이뭐임 인자는왜있고?
@kab€(寂..(119.71)
2015-05-24 20:32
추천 0
댓글 10
다른 게시글
-
인생에 도움도 안되는 프갤러새끼들 [4]철구(218.157) | 15.05.24추천 0
-
클래스 잘쓰는법이 따로 있나요? [3]익명(119.197) | 15.05.24추천 0
-
이거 문제 답이 헷갈리네 [6]요옹이(202.14) | 15.05.24추천 0
-
비주얼 스튜디오 질문 좀 받아주십시오 [11]익명(121.164) | 15.05.24추천 0
-
흥미하고 재미만 있으면 프로그래밍 적성에는 맞는거냐??? [9]수크라제(inviolable) | 15.05.24추천 0
-
... [6]ㅅㅅㅅ(125.128) | 15.05.24추천 0
-
그저께 새벽 세시까지 코드 붙잡고 씨름하다가. [7]ㅁㅌㅇㅁ(180.71) | 15.05.24추천 0
-
자바로 코딩한 파싱프로그램 파이선으로 다시짤려면 [2]Windforces(k920048) | 15.05.24추천 0
-
문제 또 싸줌 [10]야이미친(121.44) | 15.05.24추천 0
-
트리플 모니터.. [1]11(112.149) | 15.05.24추천 0
그걸 이해하려면 Windows API 프로그래밍에 대해서 알고 있어야 함.
우선, 유니코드라는 걸 C언어에서 언어적으로 wchar_t 형으로 표현할 수 있다고는 해도 이걸 화면에 뿌려준다던지 사용자한테 입력받는다던지 하기 위해서는 운영체제가 유니코드의 입출력을 지원해야 되는데, 1990년대 윈도우 9x/Me 시절에는 유니코드를 운영체제에서 기본 지원하지 않았어. 무조건 ANSI encoding된 euc-kr 문자셋을 썼고, 유니코드를 쓰려면 따로 MS 사이트에서 유니코드 지원을 깔아야 했음.
그래서 윈도우 9x/Me 시절에 프로그램을 만들 때는 유니코드가 아니라 멀티바이트(euc-kr 문자셋으로)로 짜는 게 당연시 되었음. 유니코드 지원 안하는 컴도 많았는데 쓰는 게 ㅄ이었던 시절이었지. 하지만 윈도우 NT 기반의 윈도우 2000, XP가 나오면서 NT 계열로 사용자가 넘어가면서 유니코드로 프로그래밍하는 게 대세가 되었음. 윈도우 NT에서는 유니코드를 기본 지원하거든. 오히려 윈도우 NT에서는 ANSI encoding을 쓰는 게 더 느려. ANSI encoding으로 API를 호출하면 내부적으로 Unicode 변환해서 Unicode 버전 API를 호출한다. 윈도우 내부 커널 함수들이 모두 유니코드 형태로 코딩되어 있음.
ㅅㅅㅅ//던지->든지
아무튼 그래서 2000 이후로 wchar_t를 써서 유니코드로 짜는 게 대세가 되었는데, 이게 문제가 뭐냐면 윈도우 9x/Me의 호환성을 그때까지는 포기할 수 없었던 시절이라서 막 유니코드로만 짤 수는 없었지. 지금 프로그램들이 32비트 버전과 64비트 버전을 내놓듯 당시에 프로그램 개발사들은 멀티바이트 버전과 유니코드 버전을 모두 만들었는데, 이게 char를 모두 wchar_t로 고치고 관련 함수들도 다 뜯어고쳐야 하는 일이라서 소스 코드를 싹 바꿔야 함. 엄청 귀찮고 번거로움. 고칠 데도 많고. 그래서 MS에서 만든 게 TCHAR라는 type임. Text Character의 약자인데
프갤에서 여자꼬시네
프로젝트 설정에 멀티바이트로 컴파일하게 되어있으면 TCHAR은 자동으로 char라 define되고, 유니코드로 컴파일하게 되어 있으면 TCHAR은 자동으로 wchar_t라 define됨. 유니코드로 컴파일하게 설정되면 자동으로 UNICODE 매크로 상수가 define되는데 이걸 tchar.h 내부에서 감지해서 경우에 따라 다르게 자동으로 정의해 주는 거지. TCHAR라는 타입 뿐 아니라 문자열 관련 함수들(예: strcpy, strcmp, ...)도 tchar 버전의 이름을 부여하고(예: _tcscpy, _tcscmp, ...) 이걸 쓰게끔 장려했음. 저걸 쓰면 프로젝트 설정에 따라 자동으로 예를 들어 _tcscpy면 ANSI 버전의 strcpy를 부를 지 유니코드 버전의 wcscpy를 부를 지 알아서 결정
해 줬음. 즉, 프로그래머는 멀티바이트 버전과 유니코드 버전의 프로그램을 둘 다 컴파일함에 있어서 소스 코드는 TCHAR 기준으로만 짜 놓으면 일절 소스 코드를 건드리지 않고도 프로젝트 설정만 바꿔주면 다른 버전을 바로 컴파일할 수 있게 되는 거야. 그런 의미에서 TCHAR 타입이 나온 거고 main 함수도 _tmain라는 걸 MS가 내놓았음. 문자열 관련 함수나 API를 호출하고 싶은데 main 함수의 인자는 int main(int argc, char *argv[])로 char*(ANSI 문자열)로 고정되어 있잖아. 이게 좀 불편하니까 wmain(유니코드) 버전을 만들고 둘 중 하나를 자동 결정해 주는 _tmain도 만들어준 거.
결론은 호환을 위한 '습관'이었는데 이게 대중적으로 쓰이고 MS에서도 장려하면서 이런 스타일로 짜는 게 불문율이 되었음.
http://autogram.tk/이
중고차 어플리케이션 어떤가요?