Sdílet prostřednictvím


C4996 (úroveň 3) upozornění kompilátoru

funkce": byla prohlášena za zastaralé

Kompilátor došlo k funkci, která byla označena se.Funkce již nebude podporováno v budoucí verzi.Můžete vypnout upozornění s upozornění pragma (viz příklad níže).

C4996 je generována na řádku je deklarována funkce a řádku, na kterém je tato funkce použita.

C4996 se zobrazí, pokud používáte členy <hash_map> a <hash_set> záhlaví souborů v oboru názvů std.Viz stdext oboru názvů Další informace.

Některé funkce CRT a Standard C++ Library jste se ve prospěch nových, bezpečnějších funkce.Další informace o nepoužívaných funkcí naleznete v Funkce zabezpečení v CRT a Bezpečné knihoven: Standardní knihovna C++.

C4996 může také dojít, používáte-li z bezpečnostních důvodů MFC nebo ATL funkce, které byly již nepoužívá.Potlačit tato upozornění naleznete v tématu _AFX_SECURE_NO_WARNINGS a _ATL_SECURE_NO_WARNINGS.

C4996 může dojít také při použití zařazovacího knihovny.C4996 v tomto případě je chyba, není upozornění.K této chybě dojde při použití marshal_as mezi dva datové typy, které vyžadují převod Třída marshal_context.Tato chyba obdržíte také při zařazovacího knihovny nepodporuje převod.Další informace o zařazovací knihovny, viz Přehled zařazování v jazyce C++.

Příklad

Následující ukázka generuje 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 může také dojít, jestliže kompilace s _SECURE_SCL 1 nepoužívejte kontrolované iterace.Další informace naleznete v tématu Zaškrtnuté iterátory.

Následující ukázka generuje 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
}

Následující ukázka generuje C4996, protože zařazovacího knihovna vyžaduje kontext převést z System::String na 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;
}