/sdl (habilitar comprobaciones adicionales de seguridad)
Habilita las comprobaciones recomendadas del Ciclo de vida de desarrollo de seguridad (SDL). Estas comprobaciones cambian las advertencias relevantes para la seguridad en errores y establecen características adicionales de generación de código seguro.
Sintaxis
/sdl
[-
]
Comentarios
/sdl habilita un superconjunto de comprobaciones de seguridad básicas proporcionadas por /GS
e invalida /GS-
. /sdl
está desactivada. /sdl-
deshabilita las comprobaciones de seguridad adicionales.
Comprobaciones en tiempo de compilación
/sdl
habilita estas advertencias como errores:
Advertencia habilitada por /sdl | Modificador equivalente de la línea de comandos | Descripción |
---|---|---|
C4146 | /we4146 | Se aplicó un operador unario menos a un tipo unsigned, lo que produce un resultado sin signo. |
C4308 | /we4308 | Una constante negativa de tipo entero se convirtió a un tipo sin signo, lo que produce un resultado que posiblemente carece de sentido. |
C4532 | /we4532 | El uso de las palabras clave continue , break o goto en un bloque __finally /finally tiene un comportamiento indefinido durante la terminación anormal. |
C4533 | /we4533 | El código que inicializa una variable no se ejecuta. |
C4700 | /we4700 | Uso de una variable local sin inicializar. |
C4703 | /we4703 | Uso de una variable de puntero local potencialmente no inicializada. |
C4789 | /we4789 | Saturación del búfer cuando se utilizan funciones específicas de C en tiempo de ejecución (CRT). |
C4995 | /we4995 | Uso de una función marcada con un pragma deprecated . |
C4996 | /we4996 | Uso de una función marcada como deprecated . |
Comprobaciones en tiempo de ejecución
Cuando se habilita /sdl
, el compilador genera código para realizar estas comprobaciones en tiempo de ejecución:
Habilita el modo estricto de detección de saturación del búfer en tiempo de ejecución de
/GS
, lo que equivale a compilar con#pragma strict_gs_check(push, on)
.Realiza un saneamiento del puntero limitado. En las expresiones que no implican desreferencias y en los tipos que no tienen un destructor definido por el usuario, las referencias de puntero se establecen en una dirección no válida después de una llamada a
delete
. Este saneamiento ayuda a evitar la reutilización de las referencias de puntero obsoletas.Inicializa los punteros de los miembro de la clase. Inicializa automáticamente los miembros de la clase de tipo puntero
nullptr
en la creación de una instancia del objeto (antes de que se ejecute el constructor). Ayuda a evitar el uso de punteros no inicializados que el constructor no inicializa expresamente. Se llama a la inicialización del puntero de miembro generada por el compilador siempre que:El objeto no se asigna mediante uno personalizado (definido por el usuario)
operator new
El objeto no se asigna como parte de una matriz (por ejemplo
new A[x]
)La clase no se administra ni se importa
La clase tiene un constructor predeterminado definido por el usuario.
Para que la función de inicialización de la clase generada por el compilador la inicialice, un miembro debe ser un puntero y no una propiedad o una constante.
Para más información, vea Advertencias, /sdl y mejora de la detección de variables no inicializadas.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Seleccione la página de propiedades Propiedades de configuración>C/C++>General.
Establezca la propiedad comprobaciones SDL mediante el control desplegable de propiedades. Haga clic en Aceptar o en Aplicar para guardar los cambios.
Consulte también
Opciones del compilador de MSVC
Sintaxis de la línea de comandos del compilador MSVC