/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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Общие.
Задайте свойство SDL проверки с помощью раскрывающегося списка свойств. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
См. также
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC