#pragma deprecated로 표시되었습니다.
스페이스가족이야기/SW개발이야기및팁
2009/06/08 17:49
void RetailOutput(TCHAR *tszErr, ...)
{
TCHAR tszErrOut[MAX_PATH + 256];
va_list valist;
va_start(valist,tszErr);
wvsprintf(tszErrOut, tszErr, valist);
OutputDebugString(tszErrOut);
va_end (valist);
}
warning C4995: 'wvsprintf': 이름이 #pragma deprecated로 표시되었습니다.
warning C4995: 'wvsprintfA': 이름이 #pragma deprecated로 표시되었습니다.
가볍게 천천히 알아보도록 하죠~
아무튼 이런 경고가 뜨는 함수들은 버퍼 오버플로우나 보안쪽으로 문제가 있어서 안전하지 못한 함수들이랍니다.
어쩌면 MS는 이 함수들을 사용하지 말구 다른 함수들을 썼으면 하는 바램도 있겠죠?
(다음 컴파일러에서 지원하지 않을 경우도 있겠죠?)
http://msdn.microsoft.com/en-us/library/8ef0s5kh(VS.80).aspx
위 링크 참조하세요^^
이런 문제를 해결하려면 경고가 뜬 함수를 사용하지 않고 MS에서 추천하는 보안이 된 함수를 사용하는 겁니다.
물론 바꾸는 건 간단한 겁니다.....라고 하고 싶지만 어려운 경우도 있습니다.
간단히 이런 얘가 있습니다.
Fp = fopen(strfile.c_str(), "wb");
->fopen_s(&Fp, strfile.c_str(), "wb");
{
TCHAR tszErrOut[MAX_PATH + 256];
va_list valist;
va_start(valist,tszErr);
wvsprintf(tszErrOut, tszErr, valist);
OutputDebugString(tszErrOut);
va_end (valist);
}
warning C4995: 'wvsprintf': 이름이 #pragma deprecated로 표시되었습니다.
warning C4995: 'wvsprintfA': 이름이 #pragma deprecated로 표시되었습니다.
가볍게 천천히 알아보도록 하죠~
아무튼 이런 경고가 뜨는 함수들은 버퍼 오버플로우나 보안쪽으로 문제가 있어서 안전하지 못한 함수들이랍니다.
어쩌면 MS는 이 함수들을 사용하지 말구 다른 함수들을 썼으면 하는 바램도 있겠죠?
(다음 컴파일러에서 지원하지 않을 경우도 있겠죠?)
http://msdn.microsoft.com/en-us/library/8ef0s5kh(VS.80).aspx
위 링크 참조하세요^^
이런 문제를 해결하려면 경고가 뜬 함수를 사용하지 않고 MS에서 추천하는 보안이 된 함수를 사용하는 겁니다.
물론 바꾸는 건 간단한 겁니다.....라고 하고 싶지만 어려운 경우도 있습니다.
간단히 이런 얘가 있습니다.
Fp = fopen(strfile.c_str(), "wb");
->fopen_s(&Fp, strfile.c_str(), "wb");
이런 워닝 메시지는 간단히 해결할 수 있는데 복잡한 부분도 있습니다.
문제는 오픈 소스에서 넣었으면 더욱더 앞길이 막막합니다.
(1)#pragma warning(disable:4995)
이렇게 적어주면 워닝메시지는 나오지 않습니다만 후에 문제가 될 소지가 있겠죠?
워닝 메시지가 여간 많으면 어디서 오류인지도 모르잖아여~
그리고 워닝메시지를 지운다는게 해결해야만 하는 워닝메시지도 있습니다.
값을 반환하지 않았다거나 초기화되지 않은 변수를 사용했다거나요~
워닝 메시지가 여간 많으면 어디서 오류인지도 모르잖아여~
하지만 워닝메시지를 지운다는게 해결해야만 하는 워닝메시지도 있습니다.
값을 반환하지 않았다거나 초기화되지 않은 변수를 사용했다거나요~
주저리주저리했는데 결론은 MS에서 추천한 보안된 함수를 사용하는 겁니다.
경고도 깔끔하게 MSDN을 참고하면서 처리를 해나가면 되겠죠^^













댓글을 달아 주세요