/sdl (activer des contrôles de sécurité supplémentaires)
Active les case activée de cycle de vie de développement de sécurité (SDL) recommandés. Ces case activée 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 case activée de sécurité de base fournies par /GS
et substitue /GS-
. Par défaut, /sdl
est désactivé. /sdl-
désactive les case activée 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 , break ou goto mot clé s dans unfinally /__finally bloc a un comportement non 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 case activée s 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 de configuration C/C++>Général.
Définissez la propriété SDL case activée s à 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour