/sdl (включение дополнительных проверок безопасности)

Включает рекомендованные проверки жизненного цикла разработки безопасности (SDL). Эти проверки изменяют связанные с безопасностью предупреждения в ошибки и устанавливают дополнительные функции создания безопасного кода.

Синтаксис

/sdl[-]

Remarks

/SDL включает надмножество базовых проверок безопасности, /GS предоставляемых и переопределений /GS- . По умолчанию /sdl параметр имеет значение OFF. /sdl- отключает дополнительные проверки безопасности.

Проверки времени компиляции

/sdl позволяет применять эти предупреждения как ошибки:

Включаемые/sdl предупреждения Эквивалентный параметр командной строки Description
C4146 /we4146 Унарный оператор "минус" был применен к беззнаковому типу, что приведет к получению результата без знака.
C4308 /we4308 Отрицательная целая константа преобразуется в беззнаковый тип, что, вероятно, приведет к получению бессмысленного результата.
C4532 /we4532 continueИспользование ключевых слов, break , или goto в __finally/finally блоке имеет неопределенное поведение во время аварийного завершения.
C4533 /we4533 Код инициализации переменной не выполняется.
C4700 /we4700 Используется неинициализированная локальная переменная.
C4703 /we4703 Используется потенциально неинициализированная локальная переменная-указатель.
C4789 /we4789 Переполнение буфера при использовании определенных функций среды выполнения C (CRT).
C4995 /we4995 Использование функции, помеченной директивой pragma deprecated .
C4996 /we4996 Использование функции, помеченной как deprecated .

Проверки во время выполнения

Если /sdl включен, компилятор создает код, выполняющий эти проверки во время выполнения:

  • Включает режим /GS обнаружения переполнения буфера во время выполнения, эквивалентный компиляции с #pragma strict_gs_check(push, on) .

  • Ограничена очистка указателя. В выражениях, не затрагивающих разыменование и в типах, не имеющих пользовательских деструкторов, ссылки на указатели устанавливаются в недопустимый адрес после вызова delete . Такая очистка помогает предотвратить повторное использование устаревших ссылок на указатели.

  • Инициализирует указатели членов класса. Автоматически инициализирует члены класса типа указателя до nullptr создания экземпляра объекта (перед запуском конструктора). Это помогает предотвратить использование неинициализированных указателей, которые конструктор не инициализирует явным образом. Инициализация указателя члена, созданного компилятором, вызывается при условии, что:

    • Объект не выделяется с помощью пользовательского (определенного пользователем) operator new

    • Объект не выделяется как часть массива (например new A[x] ,)

    • Класс не управляется или не импортируется

    • Класс имеет определенный пользователем конструктор по умолчанию.

    Для инициализации с помощью созданной компилятором функции инициализации класса элемент должен быть указателем, а не свойством или константой.

Дополнительные сведения см. в статьях предупреждения,/SDL и улучшение обнаружения неинициализированных переменных.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Общие.

  3. Задайте свойство проверки SDL с помощью раскрывающегося списка свойств. Нажмите кнопку ОК или Применить , чтобы сохранить изменения.

См. также раздел

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC