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

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

Синтаксис

/sdl[-]

Замечания

/sdl включает супермножество базовых проверок безопасности, предоставляемых /GS и переопределяет /GS-. По умолчанию /sdl отключен. /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