Compilador C4996 de aviso (nível 3)
'função': foi declarado preteridas
O compilador encontrou uma função que foi marcada com preterido.A função não pode ser suportada em uma versão futura.Você pode desativar esse aviso com o Aviso pragma (exemplo abaixo).
C4996 é gerado para a linha na qual a função é declarada e para a linha em que a função é usada.
Você verá C4996 se você estiver usando os membros do <hash_map> e <hash_set> arquivos de cabeçalho no namespace std.Consulte O espaço para nome do stdext para obter mais informações.
Algumas funções CRT e a biblioteca C++ padrão têm sido preteridas em favor de funções novas e mais seguras.Para obter mais informações sobre funções obsoletas, consulte Recursos de segurança no CRT e Bibliotecas de seguras: Biblioteca C++ padrão.
C4996 também pode ocorrer se você usar as funções do MFC ou ATL que foram preteridas por motivos de segurança.Para suprimir esses avisos, consulte _AFX_SECURE_NO_WARNINGS e _ATL_SECURE_NO_WARNINGS.
C4996 também pode ocorrer quando você usa a biblioteca de marshaling.Nesse caso, C4996 é um erro, não um aviso.Este erro ocorre quando você usa marshal_as para converter entre dois tipos de dados que requerem um Classe marshal_context.Você também receberá esse erro quando a biblioteca de marshaling não oferece suporte a uma conversão.Para obter mais informações sobre a biblioteca de marshaling, consulte Visão geral do empacotamento em C++.
Exemplo
O exemplo a seguir gera 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);
}
C4996 também pode ocorrer se você não usar um iterador verificado durante a compilação de _SECURE_SCL 1.Consulte Iteradores selecionados para obter mais informações.
O exemplo a seguir gera 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
}
O exemplo a seguir gera C4996 porque a biblioteca de marshaling requer um contexto para converter de um System:: String para um car *.
// 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;
}