/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

  1. 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.

  2. Seleccione la página de propiedades Propiedades de configuración>C/C++>General.

  3. 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