Udostępnij za pośrednictwem


/sdl (Włącz dodatkowe kontrole zabezpieczeń)

Włącza zalecane kontrole cyklu projektowania zabezpieczeń (SDL). Te testy umożliwiają zmianę ostrzeżeń dotyczących zabezpieczeń na błędy i ustawianie dodatkowych bezpiecznych funkcji generowania kodu.

Składnia

/sdl[-]

Uwagi

/sdl włącza nadzbiór kontroli zabezpieczeń punktu odniesienia dostarczonego przez /GS i zastępuje /GS-. Domyślnie /sdl jest wyłączona. /sdl- wyłącza dodatkowe kontrole zabezpieczeń.

Sprawdzanie czasu kompilacji

/sdl włącza te ostrzeżenia jako błędy:

Ostrzeżenie włączone przez /sdl Równoważny przełącznik wiersza polecenia opis
C4146 /we4146 Jednoargumentowy operator minus został zastosowany do typu niepodpisanego, co spowodowało niepodpisany wynik.
C4308 /we4308 Ujemna stała całkowita przekonwertowana na typ niepodpisany, co powoduje prawdopodobnie bezsensowny wynik.
C4532 /we4532 Użycie słów continuekluczowych , breaklub goto w __finally/finally bloku ma niezdefiniowane zachowanie podczas nietypowego zakończenia.
C4533 /we4533 Inicjowanie kodu zmiennej nie zostanie wykonane.
C4700 /we4700 Użycie niezainicjowanej zmiennej lokalnej.
C4703 /we4703 Użycie potencjalnie niezainicjowanej zmiennej wskaźnika lokalnego.
C4789 /we4789 Przepełnij bufor, gdy są używane określone funkcje czasu wykonywania języka C (CRT).
C4995 /we4995 Użycie funkcji oznaczonej pragma deprecated.
C4996 /we4996 Użycie funkcji oznaczonej jako deprecated.

Testy środowiska uruchomieniowego

Po /sdl włączeniu kompilator generuje kod, który wykonuje te kontrole w czasie wykonywania:

  • Włącza ścisły tryb wykrywania przekroczenia buforu /GS czasu wykonywania, co odpowiada kompilowaniu za pomocą #pragma strict_gs_check(push, on)polecenia .

  • Czy ograniczona funkcja oczyszczania wskaźnika. W wyrażeniach, które nie obejmują wyłuszczania i typów, które nie mają destruktora zdefiniowanego przez użytkownika, odwołania wskaźnika są ustawione na nieprawidłowy adres po wywołaniu metody delete. Ta oczyszczanie pomaga zapobiegać ponownemu używaniu przestarzałych odwołań wskaźnika.

  • Inicjuje wskaźniki składowe klasy. Automatycznie inicjuje składowe klasy typu wskaźnika na nullptr wystąpienie obiektu (przed uruchomieniem konstruktora). Pomaga to zapobiec używaniu niezainicjowanych wskaźników, których konstruktor nie inicjuje jawnie. Inicjowanie wskaźnika członkowskiego wygenerowanego przez kompilator jest wywoływane tak długo, jak:

    • Obiekt nie jest przydzielany przy użyciu niestandardowego (zdefiniowanego przez użytkownika) operator new

    • Obiekt nie jest przydzielany jako część tablicy (na przykład new A[x])

    • Klasa nie jest zarządzana ani importowana

    • Klasa ma konstruktor domyślny zdefiniowany przez użytkownika.

    Aby można było zainicjować przez funkcję inicjowania klasy generowanej przez kompilator, element członkowski musi być wskaźnikiem, a nie właściwością lub stałą.

Aby uzyskać więcej informacji, zobacz Ostrzeżenia, /sdl i ulepszanie niezainicjowanego wykrywania zmiennych.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).

  2. Wybierz stronę właściwości Właściwości>konfiguracji C/C++>General.

  3. Ustaw właściwość sprawdzania języka SDL przy użyciu kontrolki listy rozwijanej właściwości. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC