Compartir a través de


Advertencia del compilador (nivel 1) C4996

Actualización: noviembre 2007

Mensaje de error

'función': el símbolo se ha declarado como deprecated
'function': was declared deprecated

El compilador encontró una función marcada con deprecated. Puede que la función deje de ser compatible en futuras versiones. Se puede evitar esta advertencia mediante pragma warning (ver ejemplo a continuación).

Se genera la advertencia C4996 para la línea donde se declara la función y la línea en la que se utiliza la función.

La advertencia C4996 se obtiene si se utilizan miembros de los archivos de encabezado <hash_map> y <hash_set> en el espacio de nombres std. Vea El espacio de nombres stdext para obtener más información.

Algunas funciones de la biblioteca estándar de C++ y CRT han quedado en desuso en beneficio de funciones nuevas más seguras. Para obtener más información acerca de las funciones obsoletas, vea Security Enhancements in the CRT y Safe Libraries: Standard C++ Library.

C4996 también se puede producir si se utilizan funciones MFC o ATL que quedaron en desuso por razones de seguridad. Para suprimir estas advertencias, vea _AFX_SECURE_NO_WARNINGS y _ATL_SECURE_NO_WARNINGS.

C4996 también puede ocurrir al utilizar la biblioteca de cálculo de referencias. En este caso, C4996 es un error y no una advertencia. Este error se producirá al utilizar marshal_as para convertir entre dos tipos de datos que requieren una marshal_context Class. También recibirá este error cuando la biblioteca de cálculo de referencias no admita una conversión. Para obtener más información sobre la biblioteca de cálculo de referencias, vea Overview of Marshaling in C++.

Ejemplo

El ejemplo siguiente genera el error 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 también se puede producir si no se utiliza un iterador comprobado al compilar con _SECURE_SCL 1. Vea Checked Iterators para obtener más información.

El ejemplo siguiente genera el error 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
}

El ejemplo siguiente genera el error C4996 debido a que la biblioteca de cálculo de referencias exige un contexto para convertir de System::String a un const char *.

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