/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 break goto clés dans unfinally /__finally bloc n’a pas de comportement défini lors de continue l’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
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.
Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Général.
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