/sdl (Aktivieren zusätzlicher Sicherheitsüberprüfungen)
Aktiviert empfohlene SDL-Prüfungen (Security Development Lifecycle). Diese Überprüfungen ändern sicherheitsrelevante Warnungen in Fehler und legen zusätzliche features der sicheren Codegenerierung fest.
Syntax
/sdl
[-
]
Hinweise
/sdl ermöglicht eine Obermenge der geplanten Sicherheitsüberprüfungen, die von /GS
und Außerkraftsetzungen /GS-
bereitgestellt werden. Ist standardmäßig /sdl
deaktiviert. /sdl-
deaktiviert die zusätzlichen Sicherheitsprüfungen.
Überprüfungen zur Kompilierzeit
/sdl
aktiviert diese Warnungen als Fehler:
Durch /sdl aktivierte Warnung | Entsprechender Befehlszeilenschalter | Beschreibung |
---|---|---|
C4146 | /we4146 | Ein unärer Subtraktionsoperator wurde auf einen vorzeichenlosen Typ angewendet, was zu einem Ergebnis ohne Vorzeichen führte. |
C4308 | /we4308 | Eine negative integrale Konstante wurde in einen vorzeichenlosen Typ konvertiert, was zu einem möglicherweise bedeutungslosen Ergebnis führte. |
C4532 | /we4532 | Die Verwendung von continue , oder goto break Schlüsselwörtern in einem __finally /finally Block hat ein nicht definiertes Verhalten während einer abnormalen Beendigung. |
C4533 | /we4533 | Der Code, der eine Variable initialisiert, wird nicht ausgeführt. |
C4700 | /we4700 | Verwendung einer nicht initialisierten lokalen Variablen. |
C4703 | /we4703 | Verwendung einer möglicherweise nicht initialisierten lokalen Zeigervariablen. |
C4789 | /we4789 | Pufferüberlauf, wenn bestimmte CRT-Funktionen (C Run-Time) verwendet werden. |
C4995 | /we4995 | Verwendung einer Funktion, die mit Pragma deprecated gekennzeichnet ist. |
C4996 | /we4996 | Verwendung einer Funktion, die als gekennzeichnet ist deprecated . |
Laufzeitüberprüfungen
Wenn /sdl
diese Option aktiviert ist, generiert der Compiler Code, der diese Überprüfungen zur Laufzeit durchführt:
Aktiviert den strengen Modus der
/GS
Laufzeitpufferüberlauferkennung, die dem Kompilieren mit#pragma strict_gs_check(push, on)
.Führt die eingeschränkte Zeigerbereinigung durch. In Ausdrücken, die keine Ableitungen umfassen, und in Typen ohne benutzerdefinierte Destruktor werden Zeigerverweise nach einem Aufruf
delete
auf eine ungültige Adresse festgelegt. Diese Bereinigung trägt dazu bei, die Wiederverwendung veralteter Zeigerbezüge zu verhindern.Initialisiert Klassenmememlerzeiger. Initialisiert automatisch Klassenmber des Zeigertyps für
nullptr
die Objektinstanziierung (bevor der Konstruktor ausgeführt wird). Dadurch wird verhindert, dass nicht initialisierte Zeiger verwendet werden, die der Konstruktor nicht explizit initialisiert. Die compilergenerierte Memberpointerinitialisierung wird aufgerufen, solange:Das Objekt wird nicht mithilfe einer benutzerdefinierten (benutzerdefinierten) Zugeordnet.
operator new
Das Objekt wird nicht als Teil eines Arrays zugeordnet (z. B
new A[x]
. )Die Klasse wird nicht verwaltet oder importiert.
Die Klasse verfügt über einen benutzerdefinierten Standardkonstruktor.
Um von der compilergenerierten Klasseninitialisierungsfunktion initialisiert zu werden, muss ein Element ein Zeiger und keine Eigenschaft oder Konstante sein.
Weitere Informationen finden Sie unter Warnungen, /sdl und verbessern die Erkennung nicht initialisierter Variablen.
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).
Navigieren Sie zur Eigenschaftenseite Konfigurationseigenschaften>C/C++>Allgemein.
Legen Sie die SDL-Check-Eigenschaft mithilfe des Dropdown-Steuerelements der Eigenschaft fest. Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.
Siehe auch
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile