Visual C++ 2005 에서 warning C4996

warning C4996: ‘XXXXXX’이(가) deprecated로 선언되었습니다.

http://lagoons.net/tt/325 에서도 언급했었던 내용인데 메모용 으로 정리해 본다.

우선 의미는  해당 워닝이 발생한 함수를 더 이상 지원하지 않는 다는 의미며 곧 사라질수도 있으니 사용하지 말라는 의미.

가장 많이 발생하는 부분이 CRT 함수들 이다.
fopen 이니 strcpy 하는 함수들의 경우 일반적으로 리턴값을 바로 핸들로 사용하거나 버퍼의 크기를 입력받지 않는다. 요런 부분에서 보안상 문제가 발생할 가능성이 있다고 판단했는지 MS쪽에서 새로운 함수들을 많이 추가해 놨다.

예를 들어 fopen_s 같은 함수들. 위에서 말한것 처럼 리턴값을 파일핸들로 바로 사용하고 NULL 일 경우에만 에러다! 라고 판단하는 방식에서 좀더 개선되어 리턴값은 에러코드를 리턴하고 FILE 핸들은 함수인자로 리턴해 준다.
 

errno_t fopen_s(
  FILE** pFile,
  const char *filename,
  const char *mode
);

errno_t _wfopen_s(
  FILE** pFile,
  const wchar_t *filename,
  const wchar_t *mode
);

이런 느낌!

http://msdn2.microsoft.com/ko-kr/library/ms235425.aspx
에서 기타 다른 정보를 얻을수 있다.

ps.
돌아다니다가 웹에서 알게된 것.
위의 CRT관련 C4996 에러를 신경쓰고 싶지 않을 경우

#define _CRT_SECURE_NO_DEPRECATE

을 추가하면 된다고 한다. (테스트는 안해봤음)
출처는 이곳

“Visual C++ 2005 에서 warning C4996”에 대한 2개의 댓글

  1. file scope를 가지는 static도 deprecated로 선언되어 있다고 하더라구요. 최근에 unname namespace 관련 자료를 정리하는 중에 알았습니다. 생각보단 참~ deprecated로 선언 되어 있는게 많네요..

  2. 오호 그렇군요…file scope를 가지는 static 대신에 권장하는 사항이 unname namespace 였나요?
    C++은 이래저래 기법이 참 다양한것 같습니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다