컴파일러 경고(수준 3) C4996
'function'이(가) deprecated로 선언되었습니다.
컴파일러에서 deprecated로 표시하지 않은 함수를 발견했습니다. 이 함수는 이후 릴리스에서 제공되지 않을 수 있습니다. 다음 예제와 같이 warning pragma를 사용하여 이 경고를 해제할 수 있습니다.
C4996은 함수를 선언한 줄과 사용한 줄에서 발생합니다.
<hash_map> 및 <hash_set> 헤더 파일의 멤버를 std 네임스페이스에 사용하면 이 경고가 발생합니다. 자세한 내용은 stdext 네임스페이스를 참조하십시오.
일부 CRT 및 표준 C++ 라이브러리 함수는 보안이 강화된 새 함수로 대체되어 더 이상 사용되지 않습니다. 더 이상 사용되지 않는 함수에 대한 자세한 내용은 Security Features in the CRT 및 Safe Libraries: Standard C++ Library를 참조하십시오.
보안상의 이유로 더 이상 사용되지 않는 MFC나 ATL 함수를 사용하는 경우에도 C4996이 발생할 수 있습니다. 이러한 경고가 발생하지 않게 하려면 _AFX_SECURE_NO_WARNINGS 및 _ATL_SECURE_NO_WARNINGS를 참조하십시오.
또한 C4996은 마샬링 라이브러리를 사용할 때 발생할 수 있습니다. 이 경우 C4996은 경고가 아니라 오류입니다. 이 오류는 marshal_context Class가 필요한 두 데이터 형식 간의 변환을 위해 marshal_as를 사용할 때 발생합니다. 마샬링 라이브러리가 변환을 지원하지 않을 때 이 오류가 발생하기도 합니다. 마샬링 라이브러리에 대한 자세한 내용은 Overview of Marshaling in C++를 참조하십시오.
예제
다음 샘플에서는 C4996 경고가 발생하는 경우를 보여 줍니다.
// C4996.cpp
// compile with: /W3
// C4996 warning expected
#include <stdio.h>
// #pragma warning(disable : 4996)
void func1(void) {
printf_s("\nIn func1");
}
__declspec(deprecated) void func1(int) {
printf_s("\nIn func2");
}
int main() {
func1();
func1(1);
}
_SECURE_SCL 1을 사용하여 컴파일할 때 확인된 반복기를 사용하지 않는 경우에도 C4996이 발생할 수 있습니다. 자세한 내용은 Checked Iterators를 참조하십시오.
다음 샘플에서는 C4996 경고가 발생하는 경우를 보여 줍니다.
// C4996_b.cpp
// compile with: /EHsc /W3 /c
#define _SECURE_SCL 1
#include <algorithm>
using namespace std;
using namespace stdext;
int main() {
int a [] = {1, 2, 3};
int b [] = {10, 11, 12};
copy(a, a + 3, b + 1); // C4996
// try the following line instead
// copy(a, a + 3, b);
copy(a, a + 3, checked_array_iterator<int *>(b, 3)); // OK
}
마샬링 라이브러리에 System::String에서 const char *로 변환하는 컨텍스트가 필요하기 때문에 다음 샘플에서는 C4996 경고가 생성됩니다.
// C4996_Marshal.cpp
// compile with: /clr
// C4996 expected
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>
using namespace System;
using namespace msclr::interop;
int main() {
String^ message = gcnew String("Test String to Marshal");
const char* result;
result = marshal_as<const char*>( message );
return 0;
}