/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 continue kluczowych , break lub 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
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).
Wybierz stronę właściwości Właściwości>konfiguracji C/C++>General.
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