/sdl (Habilitar verificações de segurança adicionais)
Habilita as verificações recomendadas do SDL (Security Development Lifecycle). Essas verificações transformam os avisos relevantes à segurança em erros e definem recursos adicionais de geração de código seguro.
Sintaxe
/sdl
[-
]
Comentários
A /sdl habilita um superconjunto de verificações de segurança de linha de base fornecidas por /GS
e substitui /GS-
. Por padrão, /sdl
permanece desativado. /sdl-
desabilita as verificações de segurança adicionais.
Verificações de tempo de compilação
/sdl
habilita esses avisos como erros:
Aviso habilitado pela opção /sdl | Opção de linha de comando equivalente | Descrição |
---|---|---|
C4146 | /we4146 | Um operador unário de subtração foi aplicado a um tipo sem sinal, gerando um resultado sem sinal. |
C4308 | /we4308 | Uma constante integral negativa convertida em tipo sem sinal, gerando um resultado possivelmente sem sentido. |
C4532 | /we4532 | O uso de palavras-chave continue , break ou goto em um bloco __finally /finally tem um comportamento indefinido durante o encerramento anormal. |
C4533 | /we4533 | A inicialização de uma variável no código não será executada. |
C4700 | /we4700 | Uso de uma variável local não inicializada. |
C4703 | /we4703 | Uso de uma variável de ponteiro local possivelmente não inicializada. |
C4789 | /we4789 | Saturação de buffer quando funções específicas do CRT (runtime do C) são usadas. |
C4995 | /we4995 | Uso de uma função marcada com pragma deprecated . |
C4996 | /we4996 | Uso de uma função marcada como deprecated . |
verificações de runtime
Quando /sdl
está habilitado, o compilador gera o código que faz essas verificações em tempo de execução:
Habilita o modo estrito de detecção de saturação de buffer em tempo de execução do
/GS
, equivalente à compilação com#pragma strict_gs_check(push, on)
.Faz a limpeza de ponteiro limitada. Em expressões que não envolvem desreferências e em tipos que não têm nenhum destruidor definido pelo usuário, as referências de ponteiro são definidas como um endereço não válido após uma chamada para
delete
. Essa limpeza ajuda a evitar a reutilização de referências de ponteiro obsoletas.Inicializa ponteiros de membro de classe. Inicializa automaticamente os membros da classe do tipo de ponteiro como
nullptr
na instanciação do objeto (antes da execução do construtor). Isso ajuda a impedir o uso de ponteiros não inicializados que o construtor não inicializa explicitamente. A inicialização do ponteiro do membro gerado pelo compilador é chamada desde que:O objeto não é alocado usando um
operator new
personalizado (definido pelo usuário)O objeto não é alocado como parte de uma matriz (por exemplo
new A[x]
)A classe não é gerenciada nem importada
A classe tem um construtor padrão definido pelo usuário.
Para ser inicializado pela função de inicialização de classe gerada pelo compilador, um membro deve ser um ponteiro e não uma propriedade ou uma constante.
Para mais informações, confira Avisos, /sdl e melhoria da detecção de variáveis não inicializadas.
Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades da Configuração>C/C++>Geral.
Defina a propriedade Verificações do SDL usando o controle suspenso da propriedade. Escolha OK ou Aplicar para salvar as alterações.
Confira também
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC