Condividi tramite


Avviso del compilatore (livello 3) C4996

'funzione': è stato dichiarato deprecato

È stata rilevata una funzione contrassegnata con deprecated.È possibile che tale funzione non sia più supportata in una versione futura.Disattivare l'avviso con il pragma warning, come illustrato nell'esempio seguente.

L'avviso C4996 viene generato per la riga in cui la funzione viene dichiarata e per la riga in cui la funzione viene utilizzata.

L'avviso C4996 viene generato se si utilizzano membri dei file di intestazione <hash_map> e <hash_set>.Per ulteriori informazioni, vedere lo spazio dei nomi stdext.

Alcune funzioni CRT e della libreria C++ standard sono state deprecate in favore di nuove funzioni più sicure.Per ulteriori informazioni sulle funzioni deprecate, vedere Funzionalità di sicurezza in CRT e Librerie protette: La libreria C++ standard.

L'avviso C4996 può essere visualizzato anche nel caso in cui vengano utilizzate funzioni MFC o ATL dichiarate deprecate per motivi di sicurezza.Per eliminare questi avvisi, vedere _AFX_SECURE_NO_WARNINGS e _ATL_SECURE_NO_WARNINGS.

Può verificarsi C4996 anche quando si utilizza la libreria del marshalling.In questo caso C4996 rappresenta un errore e non un avviso.Si verificherà questo errore quando si utilizza marshal_as per convertire tra due tipi di dati che richiedono un Classe marshal_context.Si riceverà anche questo errore quando la libreria del marshalling non supporta una conversione.Per ulteriori informazioni sulla libreria del marshalling, vedere Cenni preliminari sul marshalling in C++.

Esempio

Nell'esempio seguente viene generato l'errore 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);
}

‎L'errore C4996 può verificarsi anche quando si esegue la compilazione con _SECURE_SCL 1 senza utilizzare un iteratore verificato.Per ulteriori informazioni, vedere Iteratori verificati.

Nell'esempio seguente viene generato l'errore 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
}

Nell'esempio seguente è generato C4996 perché la libreria del marshalling richiede un contesto di convertire da un System::String ad un carattere del const *.

// 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;
}