/sdl (Povolit další kontroly zabezpečení)
Umožňuje doporučené kontroly životního cyklu vývoje zabezpečení (SDL). Tyto kontroly mění upozornění související se zabezpečením na chyby a nastavují další zabezpečené funkce generování kódu.
Syntaxe
/sdl
[-
]
Poznámky
/sdl umožňuje nadmnožinu standardních kontrol zabezpečení poskytovaných /GS
a přepsáním /GS-
. Ve výchozím nastavení /sdl
je vypnuto. /sdl-
zakáže další kontroly zabezpečení.
Kontroly v čase kompilace
/sdl
povolí tato upozornění jako chyby:
Upozornění povolené /sdl | Ekvivalentní přepínač příkazového řádku | Popis |
---|---|---|
C4146 | /we4146 | Operátor unární mínus byl použit na nepodepsaný typ, což vede k nepodepsanému výsledku. |
C4308 | /we4308 | Záporný celočíselný konstanta převedená na nepodepsaný typ, což vede k potenciálně bezvýznamným výsledkům. |
C4532 | /we4532 | continue Použití , break nebo goto klíčových slov v __finally /finally bloku má nedefinované chování během neobvyklého ukončení. |
C4533 | /we4533 | Inicializace kódu proměnné se nespustí. |
C4700 | /we4700 | Použití neinicializované místní proměnné |
C4703 | /we4703 | Použití potenciálně neinicializované místní proměnné ukazatele |
C4789 | /we4789 | Přetečení vyrovnávací paměti při použití konkrétních funkcí C runtime (CRT). |
C4995 | /we4995 | Použití funkce označené direktivou pragma deprecated . |
C4996 | /we4996 | Použití funkce označené jako deprecated . |
Kontroly za běhu
Pokud /sdl
je povoleno, kompilátor generuje kód, který provádí tyto kontroly za běhu:
Umožňuje striktní režim
/GS
detekce přetečení vyrovnávací paměti za běhu, která odpovídá kompilaci s#pragma strict_gs_check(push, on)
.Omezuje sanitizaci ukazatele. Ve výrazech, které nezahrnují dereference a typy, které nemají žádný uživatelem definovaný destruktor, jsou odkazy ukazatele nastaveny na neplatnou adresu po volání
delete
. Tato sanitizace pomáhá zabránit opakovanému použití zastaralých odkazů ukazatele.Inicializuje ukazatele členů třídy. Automaticky inicializuje členy třídy typu ukazatele na
nullptr
instanci objektu (před spuštěním konstruktoru). Pomáhá zabránit použití neinicializovaných ukazatelů, které konstruktor explicitně inicializuje. Inicializace inicializace ukazatele členu vygenerovaného kompilátorem se volá, pokud:Objekt není přidělen pomocí vlastního objektu (definovaný uživatelem).
operator new
Objekt není přidělen jako součást pole (například
new A[x]
)Třída není spravovaná ani importovaná.
Třída má uživatelem definovaný výchozí konstruktor.
Chcete-li inicializovat pomocí inicializační funkce třídy vygenerované kompilátorem, musí být člen ukazatelem, nikoli vlastností nebo konstantou.
Další informace naleznete v tématu Upozornění, /sdl a vylepšení detekce neinicializovaných proměnných.
Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností konfigurace>C/C++>Obecné.
Nastavte vlastnost kontroly SDL pomocí rozevíracího ovládacího prvku vlastnosti. Změny uložíte kliknutím na OK nebo Použít .
Viz také
Parametry kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC