Was ist der beste Weg, um die über generierten Warnungen zu deaktivieren _CRT_SECURE_NO_DEPRECATE
, damit sie problemlos wiederhergestellt werden können und in allen Visual Studio-Versionen funktionieren?
quelle
Was ist der beste Weg, um die über generierten Warnungen zu deaktivieren _CRT_SECURE_NO_DEPRECATE
, damit sie problemlos wiederhergestellt werden können und in allen Visual Studio-Versionen funktionieren?
Wenn Sie Ihren Quellcode nicht verschmutzen möchten (nachdem diese Warnung nur beim Microsoft-Compiler angezeigt wird), fügen Sie _CRT_SECURE_NO_WARNINGS
Ihren Projekteinstellungen über "Projekt" -> "Eigenschaften" -> "Konfigurationseigenschaften" -> "C / C ++" ein Symbol hinzu "->" Präprozessor "->" Präprozessordefinitionen ".
Sie können es auch definieren, bevor Sie eine Header-Datei einfügen, die diese Warnung generiert. Sie sollten so etwas hinzufügen
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
Und nur eine kleine Bemerkung: Stellen Sie sicher, dass Sie verstehen, wofür diese Warnung steht. Wenn Sie nicht beabsichtigen, andere Compiler als MSVC zu verwenden, sollten Sie eine sicherere Version der Funktionen verwenden, z. B. strcpy_s anstelle von strcpy.
Sie können die Warnungen vorübergehend an Stellen deaktivieren, an denen sie mithilfe von angezeigt werden
#pragma warning(push) #pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent // deprecated code here #pragma warning(pop)
Sie deaktivieren also nicht alle Warnungen, die manchmal schädlich sein können.
quelle
#pragma warning(supress: warning-code)
Wenn nur eine (die folgende) Zeile eine veraltete Funktion verwendet.suppress
mit zwei PsIch arbeite an einem Multi-Plattform-Projekt, daher kann ich die Funktion _s nicht verwenden und möchte meinen Code nicht mit Visual Studio-spezifischem Code verschmutzen.
Meine Lösung besteht darin, die Warnung 4996 im Visual Studio-Projekt zu deaktivieren. Gehen Sie zu Projekt -> Eigenschaften -> Konfigurationseigenschaften -> C / C ++ -> Erweitert -> Spezifische Warnung
deaktivieren und fügen Sie den Wert 4996 hinzu bevor Sie atl _ATL_SECURE_NO_DEPRECATE einschließen.
Ich benutze diese Lösung in Visual Studio 2003 und 2005.
ps Wenn Sie nur Visual Studio verwenden, können die sicheren Vorlagenüberladungen eine gute Lösung sein.
quelle
*_s
Funktionen sind nicht Microsoft-spezifisch. Sie werden als Bounds Checking-Schnittstellen bezeichnet und sind Teil des C / C ++ - Standards. Siehe ISO / IEC TR 24772 . Die Glibc-Leute beschlossen, sie nicht umzusetzen.Sie können auch die Überlastungen für sichere Vorlagen verwenden . Sie helfen Ihnen dabei, die unsicheren Aufrufe überall dort durch sichere zu ersetzen, wo die Puffergröße (statische Arrays) leicht abgeleitet werden kann.
Fügen Sie einfach Folgendes hinzu:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
Beheben Sie dann die verbleibenden Warnungen von Hand mithilfe der Funktionen _s.
quelle
Kombination aus @ [macbirdie] und @ [Adrian Borchardt] Antwort. Dies erweist sich in der Produktionsumgebung als sehr nützlich (da zuvor vorhandene Warnungen, insbesondere beim plattformübergreifenden Kompilieren, nicht durcheinander gebracht werden).
#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
quelle
Für die Warnung von Fall zu Fall ist es ratsam, sie irgendwann auf den Standardwert zurückzusetzen, da Sie dies von Fall zu Fall tun.
#pragma warning(disable: 4996) /* Disable deprecation */ // Code that causes it goes here #pragma warning(default: 4996) /* Restore default */
quelle
Der beste Weg, dies zu tun, ist eine einfache Überprüfung und Bewertung. Normalerweise mache ich so etwas:
#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, was wirklich benötigt wird, ist das Folgende:
#pragma warning(disable: 4996)
Hat mich noch nicht im Stich gelassen; Hoffe das hilft
quelle
Sie können die Sicherheitsüberprüfung deaktivieren. gehe zu
Projekt -> Eigenschaften -> Konfigurationseigenschaften -> C / C ++ -> Codegenerierung -> Sicherheitsüberprüfung
und wählen Sie Sicherheitsüberprüfung deaktivieren (/ GS-)
quelle
Sie können das Symbol _CRT_SECURE_NO_WARNINGS definieren, um sie zu unterdrücken, und die Definition aufheben, um sie wieder herzustellen.
quelle
Noch eine späte Antwort ... So verwendet Microsoft es in ihren
wchar.h
. Beachten Sie, dass sie auch die Warnung C6386 deaktivieren :__inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemcpy_s) wchar_t * __CRTDECL wmemcpy(_Out_opt_cap_(_N) wchar_t *_S1, _In_opt_count_(_N) const wchar_t *_S2, _In_ size_t _N) { #pragma warning( push ) #pragma warning( disable : 4996 6386 ) return (wchar_t *)memcpy(_S1, _S2, _N*sizeof(wchar_t)); #pragma warning( pop ) }
quelle