2010년 2월 26일 금요일

getch()와 _getch()

오늘 C로 정적 라이브러리 만들어보는 공부를 하고있는 도중에 예전 C공부했을 때 프로그램이 그냥 결과를 확인하지 못하고 그냥 꺼지는걸 방지하기 위해 마지막 줄에 추가해주었던 getch()를 한번 써보았다.

 

VC 2009에서는 Warning C4996이 뜨면서 _getch()라는 함수로 대체 실행된다는 Message가 출력되었다.

 

무슨 뜻인지 몰라서 msdn에 들어가 보았다

 

--------------------------------------------------------------------------------

getch

 

This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _getch instead.

 

출처 - msdn

--------------------------------------------------------------------------------

 

이 POSIX 함수는 Visual C++ 2005 때부터 사용하지 않으므로, ISO C++ 승인 함수인 _getch를 대신 사용하시오.

 

대충 이런 내용이다.

 

이 문장을 재대로 이해하기 위해서 POSIX라는 것이 무엇인지에 대해 의문이 생겨서 찾아보았다.

 

-------------------------------------------------------------------------------

POSIX

위키백과 ― 우리 모두의 백과사전.

이식 가능 운영 체제 인터페이스(移植可能運營體制 interface, portable operating system interface), 또는 포식스 또는 포직스(POSIX /ˈpɒzɪks/ 파직스[*])는 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격이다.

POSIX의 마지막 글자 X는 유닉스 호환 운영체제에 보통 X가 붙는 것에서 유래한다.

규격의 내용은 커널로의 C 언어 인터페이스인 시스템 콜 뿐 아니라, 프로세스 환경, 파일과 디렉터리, 시스템 데이터베이스(암호 파일 등), tar 압축 포맷 등 다양한 분야를 아우른다.

유닉스 계열 외에 마이크로소프트 윈도 NT는 POSIX 1.0에 준하는 POSIX 서브 시스템을 탑재하고 있으며, POSIX 응용 프로그램을 서브 시스템에서 실행할 수 있다. 이는 주로 미국 정부기관의 컴퓨터 시스템 도입조건(FIPS)에서 POSIX 준거할 것을 요구하기 때문이다. 윈도 2000까지 POSIX 서브시스템을 탑재하고 있었지만 윈도 XP에서 폐지되었다.

 

출처 - http://ko.wikipedia.org/wiki/POSIX

 

---------------------------------------------------------------------------------

 

결국 The POSIX Function 이라는 것은 IEEE가 책정한 애플리케이션 인터페이스 규격을 따른 함수라는 것이다. 뒤에 Win XP부터 POSIX 서브시스템을 폐지했다는 내용으로 봐서 저 시스템이 없기 때문에 getch()를 사용할 수 없는 것 같다.

 

그렇기 때문에 VC 2005 부터는 _getch()로 컴파일러가 자동 변환 해주는 것이라는게 내 판단이다.

댓글 없음:

댓글 쓰기