_tmain(), main(), wmain()
리버싱을 공부할려고 리버싱의 정석책이라고 불리는 "리버싱 핵심원리" 라는 책을 펼쳤다.
처음 디버깅하는 프로그램은 우리 모두가 아는 hello world 프로그램이었다.
그런데 소스코드를 보니 main함수를 써야 하는데 main함수는 보이지도 않고 대신 _tmain함수가 있었다.
나는 궁금해서 바로 구글링을 해봤고 정리하자면 이러하다.
-
※ _tmain() VS main()※
C언어로 작성된 모든 프로그램은 프로그램의 시작을 의미하는 함수인 main함수가 존재한다.
그렇지만 그 main함수도 Microsoft에서는 확장된 형태의 main함수를 만들었는데
그게 바로 _tmain이다. 그렇다면 _tmain과 main은 뭐가 다를까?
main() : C++ standrard 즉, C++ 표준 함수이다.
_tmain : Microsoft에서 확장된 형태의 main이다.
이 둘의 차이는 멀티 바이트를 사용하냐, 유니코드를 사용하냐로 구분지을 수 있다.
좀 더 간략하게 설명하자면 유니코드를 사용하냐 안하냐로 구분지을 수 있다.
_tmain함수는 유니코드를 지원하는 프로그램은 컴파일 시
main함수의 와이드 문자 버전인 wmain함수로 바뀌고
유니코드를 지원하지 않는 프로그램은 컴파일 시 main함수로 바뀐다고 한다.
다음은 main함수와 _tmain함수 그리고 wmain함수의 원형이다.
int main(int argc, char* argv[])
int wmain(int argc, wchar_t* argv[])
int _tmain(int argc, _TCHAR *argv[])
그리고 무엇보다도 _tamin함수를 사용하기 위해서는 tchar.h 헤더파일을 포함시켜줘야 한다.
'C > C note' 카테고리의 다른 글
[C Note] WinAPI/MFC _TCHAR, _tmain, _tprint, L””, TEXT(), _T() (0) | 2022.08.24 |
---|---|
[C Note] 비전공자들을 위한 알아두면 좋은 프로그램과 C언어 기본 개념 (0) | 2022.08.22 |
[C 언어] while문 process(with Assembly) (0) | 2022.06.30 |
[C 언어] if문, strlen() 함수, strcmp() 함수 process(with Assembly) (0) | 2022.06.30 |
[C 언어] For문 process(with Assembly) (0) | 2022.06.29 |