Поделиться через


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

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

/sdl[-]

Заметки

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

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

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

Включаемые/sdl предупреждения

Эквивалентный параметр командной строки

Описание

C4146

/we4146

Унарный оператор "минус" был применен к беззнаковому типу, что приведет к получению результата без знака.

C4308

/we4308

Отрицательная целая константа преобразуется в беззнаковый тип, что, вероятно, приведет к получению бессмысленного результата.

C4532

/we4532

Использование ключевых слов continue, break и goto в блоке __finally/finally приводит к неопределенному поведению во время аварийного завершения работы.

C4533

/we4533

Код инициализации переменной не выполняется.

C4700

/we4700

Используется неинициализированная локальная переменная.

C4703

/we4703

Используется потенциально неинициализированная локальная переменная-указатель.

C4789

/we4789

Переполнение буфера при использовании определенных функций среды выполнения C (CRT).

C4995

/we4995

Использование функции, помеченной директивой pragma как устаревшая.

C4996

/we4996

Использование функции, помеченной как устаревшая.

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

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

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

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

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

Заметки

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

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

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Выберите папку C/C++.

  3. На странице Общие выберите параметр из раскрывающегося списка Проверки SDL.

См. также

Ссылки

Параметры компилятора

Настройка параметров компилятора