/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 continuePoužití , breaknebo 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

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností konfigurace>C/C++>Obecné.

  3. 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