Partager via


/sdl (activer des contrôles de sécurité supplémentaires)

Active les vérifications de cycle de vie de développement de sécurité (SDL) recommandées. Ces contrôles modifient les avertissements pertinents pour la sécurité en erreurs et définissent des fonctionnalités de génération de code sécurisées supplémentaires.

Syntaxe

/sdl[-]

Notes

/sdl active un sur-ensemble des vérifications de sécurité de base fournies par /GS et substitue /GS-. Par défaut, /sdl est désactivé. /sdl- désactive les vérifications de sécurité supplémentaires.

Vérifications au moment de la compilation

/sdl active ces avertissements en tant qu’erreurs :

Avertissement activé par /sdl Commutateur de ligne de commande équivalent Description
C4146 /we4146 Un opérateur moins unaire a été appliqué à un type non signé, ce qui génère un résultat non signé.
C4308 /we4308 Une constante intégrale négative a été convertie en type non signé, générant éventuellement un résultat sans signification.
C4532 /we4532 L’utilisation de mots clés ou de mots breakgoto clés dans unfinally/__finally bloc n’a pas de comportement défini lors de continuel’arrêt anormal.
C4533 /we4533 Le code d'initialisation d'une variable ne sera pas exécuté.
C4700 /we4700 Utilisation d'une variable locale non initialisée.
C4703 /we4703 Utilisation d'une variable de pointeur locale potentiellement non initialisée.
C4789 /we4789 Dépassement de mémoire tampon quand des fonctions CRT (Runtime C) spécifiques sont utilisées.
C4995 /we4995 Utilisation d’une fonction marquée avec pragma deprecated.
C4996 /we4996 Utilisation d’une fonction marquée comme deprecated.

Vérifications à l’exécution

Lorsqu’il /sdl est activé, le compilateur génère du code qui effectue ces vérifications au moment de l’exécution :

  • Active le mode strict de détection de dépassement de mémoire tampon au moment de /GS l’exécution, équivalent à la compilation avec #pragma strict_gs_check(push, on).

  • Ne désinfecte pas le pointeur. Dans les expressions qui n’impliquent pas de déréférencements et dans les types qui n’ont aucun destructeur défini par l’utilisateur, les références de pointeur sont définies sur une adresse non valide après un appel à delete. Cette assainissement permet d’empêcher la réutilisation des références de pointeur obsolètes.

  • Initialise les pointeurs membres de classe. Initialise automatiquement les membres de classe de type pointeur vers nullptr l’instanciation de l’objet (avant l’exécution du constructeur). Cela permet d’empêcher l’utilisation de pointeurs non initialisés que le constructeur n’initialise pas explicitement. L’initialisation du pointeur membre généré par le compilateur est appelée tant que :

    • L’objet n’est pas alloué à l’aide d’un objet personnalisé (défini par l’utilisateur) operator new

    • L’objet n’est pas alloué dans le cadre d’un tableau (par exemple new A[x])

    • La classe n’est pas gérée ou importée

    • La classe a un constructeur par défaut défini par l’utilisateur.

    Pour être initialisé par la fonction d’initialisation de classe générée par le compilateur, un membre doit être un pointeur et non une propriété ou une constante.

Pour plus d’informations, consultez Avertissements, /sdl et amélioration de la détection des variables non initialisées.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Général.

  3. Définissez la propriété de vérification SDL à l’aide du contrôle de liste déroulante des propriétés. Choisissez OK ou Appliquer pour enregistrer vos modifications.

Voir aussi

Options du compilateur MSVC
Syntaxe de la ligne de commande du compilateur MSVC