Frage

Was ist der beste Weg, um die Warnungen generiert über _CRT_SECURE_NO_DEPRECATE deaktivieren, die sie mit Leichtigkeit wieder werden kann und wird über Visual Studio-Versionen arbeiten?

War es hilfreich?

Lösung

Wenn Sie nicht möchten, dass Ihr Quellcode verschmutzen (schließlich diese Warnung nur mit Microsoft-Compiler präsentiert), _CRT_SECURE_NO_WARNINGS Symbol zu den Projekteinstellungen über „Projekt“ hinzufügen -> „Eigenschaften“ -> „Konfigurationseigenschaften“ -> "C / C ++" -> "Preprocessor." -> "Präprozessordefinitionen"

Sie können auch sie nur definieren, bevor Sie eine Header-Datei enthalten, die diese Warnung erzeugt. Sie sollten so etwas wie dieses Add

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
mit sichererer Version von Funktionen, dh strcpy_s statt strcpy

Und nur eine kleine Bemerkung, stellen Sie sicher, dass Sie verstehen, was diese Warnung steht, und vielleicht, wenn Sie nicht beabsichtigen, andere Compiler als MSVC zu verwenden, in Betracht ziehen.

Andere Tipps

Sie können die Warnungen vorübergehend an Orten, wo sie deaktivieren, indem Sie

erscheinen
#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)

, so dass Sie nicht deaktivieren Sie alle Warnungen, die manchmal schädlich sein kann.

i auf einem Multi-Plattform-Projekt arbeiten, also kann ich nicht _s Funktion verwenden, und ich möchte nicht meinen Code mit Visual Studio spezifischem Code verschmutzt.
meine Lösung ist die Warnung 4996 auf dem Visual Studio-Projekt deaktivieren. gehen Sie zu Projekt -> Eigenschaften -> Konfigurationseigenschaften -> C / C ++ -> Erweitert -> Deaktivieren Sie bestimmte Warnung fügen Sie den Wert 4996.
  wenn Sie auch die mfc und / oder atl-Bibliothek (nicht mein Fall) definieren, bevor mfc _AFX_SECURE_NO_DEPRECATE umfassen und vor umfassen atl _ATL_SECURE_NO_DEPRECATE.
  Ich benutze diese Lösung in Visual Studio 2003 und 2005.

P. S. wenn Sie Visual Studio die sichere Vorlage Überlastungen verwenden könnte eine gute Lösung sein.

Sie können auch die Vorlage Überlastungen Sichern , sie werden Ihnen helfen, die unsicheren Anrufe mit sicheren ersetzen überall ist es möglich, leicht Puffergröße (statische Arrays) ableiten.

Fügen Sie einfach die folgenden:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 

Dann fixieren Sie die verbleibenden Warnungen von Hand, indem Sie die _s Funktionen.

Die Kombination von @ [macbirdie] und @ [Adrian Borchardt] Antwort. Welche erweist sich als sehr nützlich in der Produktionsumgebung sein (nicht vorher bestehende Warnung vermasselte, vor allem während der Cross-Plattform-Kompilierung)

#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(push)
#pragma warning(disable: 4996) // Disable deprecation
#endif 
//...                          // ...
strcat(base, cat);             // Sample depreciated code
//...                          // ...
#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(pop)           // Renable previous depreciations
#endif

Für die Warnung von Fall Warnung Es ist klug, um sie wiederherzustellen irgendwann auf dem Standard, da Sie es auf einem von Fall zu Fall tun.

#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */

Der beste Weg, dies zu tun ist durch eine einfache Prüfung und bewerten. Ich mache so etwas wie dies in der Regel:

#ifndef _DEPRECATION_DISABLE   /* One time only */
#define _DEPRECATION_DISABLE   /* Disable deprecation true */
#if (_MSC_VER >= 1400)         /* Check version */
#pragma warning(disable: 4996) /* Disable deprecation */
#endif /* #if defined(NMEA_WIN) && (_MSC_VER >= 1400) */
#endif /* #ifndef _DEPRECATION_DISABLE */

Alles, wirklich benötigt wird, ist die folgende:

#pragma warning(disable: 4996)

Hat mir noch nicht ausgefallen ist; Hoffe, das hilft

Sie können Sicherheitsüberprüfung deaktivieren. gehen Sie zu

Projekt -> Eigenschaften -> Konfigurationseigenschaften -> C / C ++ -> Code Generation -> Security Check

und wählen Sie Deaktivieren Security Check (/ GS -)

Sie können das _CRT_SECURE_NO_WARNINGS Symbol definieren, sie zu unterdrücken und undefine es sie zurück wieder einzusetzen.

scroll top