Ensemble de règles des règles recommandées mixtes
Les règles recommandées mixtes de Microsoft se concentrent sur les problèmes les plus courants et critiques dans vos projets C++ qui prennent en charge le Common Language Runtime, notamment les failles de sécurité potentielles, les incidents d’application et d’autres erreurs de logique et de conception importantes. Cet ensemble de règles inclut toutes les règles de l’ensemble Règles minimales mixtes.
Incluez cet ensemble de règles dans n’importe quel ensemble de règles personnalisé que vous créez pour vos projets C++ qui prennent en charge le Common Language Runtime.
Règle | Description |
---|---|
C6001 | Utilisation d'une mémoire non initialisée |
C6011 | Déréférencement du pointeur Null |
C6029 | Utilisation d'une valeur non vérifiée |
C6031 | Valeur renvoyée ignorée |
C6053 | Terminaison par zéro de l'appel |
C6054 | Terminaison par zéro manquante |
C6059 | Concaténation non valide |
C6063 | Argument de chaîne manquant pour le formatage de la fonction |
C6064 | Argument d’entier manquant pour le formatage de la fonction |
C6066 | Argument de pointeur manquant pour le formatage de la fonction |
C6067 | Argument de pointeur de chaîne manquant pour le formatage de la fonction |
C6101 | Retour d'une mémoire non initialisée |
C6200 | L'index dépasse la taille maximale autorisée par la mémoire tampon |
C6201 | L'index dépasse la taille maximale autorisée par la mémoire tampon allouée par la pile |
C6214 | Cast HRESULT To BOOL non valide |
C6215 | Cast BOOL To HRESULT non valide |
C6216 | Cast inséré par compilateur BOOL To HRESULT non valide |
C6217 | Test HRESULT non valide avec NOT |
C6220 | Comparaison de HRESULT non valide à -1 |
C6226 | Affectation de HRESULT non valide à -1 |
C6230 | Utilisation de HRESULT non valide en tant que booléen |
C6235 | Constante non nulle avec Logical-Or |
C6236 | Logical-Or avec une constante non nulle |
C6237 | Zéro avec Logical-And perd les effets secondaires |
C6242 | Déroulement local forcé |
C6248 | Création d’un DACL nul |
C6250 | Descripteurs d’adresses non mis en lecture |
C6255 | Utilisation non protégée d’alloca |
C6258 | Utilisation de l’interruption du thread |
C6259 | Code mort dans le commutateur limité Bitwise-Or |
C6260 | Utilisation de l’arithmétique d’octets |
C6262 | Utilisation excessive de l’empilement |
C6263 | Utilisation d’alloca dans une boucle |
C6268 | Parenthèses manquantes dans le cast |
C6269 | Déréférencement du pointeur ignoré |
C6270 | Argument float manquant pour le formatage de la fonction |
C6271 | Argument supplémentaire pour le formatage de la fonction |
C6272 | Argument non float pour le formatage de la fonction |
C6273 | Argument non entier pour la fonction Format |
C6274 | Argument autre qu’un caractère pour le formatage de la fonction |
C6276 | Cast de chaîne non valide |
C6277 | Appel CreateProcess non valide |
C6278 | Incompatibilité Array-New Scalar-Delete |
C6279 | Incompatibilité Scalar-New Array-Delete |
C6280 | Incompatibilité de la mémoire Allocation-Deallocation |
C6281 | Priorité de relation au niveau du bit |
C6282 | Remplacement de l’affectation par le test |
C6283 | Incompatibilité primitive Array-New Scalar-Delete |
C6284 | Argument d’objet non valide pour le formatage de la fonction |
C6285 | Logical-Or de constantes |
C6286 | Non nul Logical-Or perd les effets secondaires |
C6287 | Test redondant |
C6288 | Inclusion mutuelle sur Logical-And est False |
C6289 | Exclusion mutuelle sur Logical-Or est True |
C6290 | Priorité NOT logique et AND au niveau du bit |
C6291 | Priorité NOT logique et OR au niveau du bit |
C6292 | Nombre de boucles vers le haut à partir du maximum |
C6293 | Nombres de boucles vers le bas à partir du minimum |
C6294 | Corps de boucles jamais exécuté |
C6295 | Boucle infinie |
C6296 | Boucle exécutée une seule fois |
C6297 | Résultat du cast de décalage vers une plus grande taille |
C6299 | Comparaison de champ de bits et booléen |
C6302 | Argument de chaîne de caractères non valide pour le formatage de la fonction |
C6303 | Argument de chaîne de caractères larges non valide pour le formatage de la fonction |
C6305 | Incompatibilité entre la taille et la quantité |
C6306 | Appel de fonction d’argument de variable non valide |
C6308 | Fuite realloc |
C6310 | Constante de filtre d’exception non valide |
C6312 | Boucle d’exécution continue d’exception |
C6314 | Priorité sur Bitwise-Or |
C6317 | Non complémentaire |
C6318 | Recherche continue d’exception |
C6319 | Ignoré par une virgule |
C6324 | Copie de chaîne au lieu de comparaison de chaînes |
C6328 | Incompatibilité de type d’argument possible |
C6331 | Indicateurs non valides VirtualFree |
C6332 | Paramètre non valide VirtualFree |
C6333 | Taille non valide VirtualFree |
C6335 | Descripteur de processus de fuite |
C6381 | Informations d’arrêt manquantes |
C6383 | Dépassement de mémoire tampon Element-Count Byte-Count |
C6384 | Division de taille du pointeur |
C6385 | Dépassement en lecture |
C6386 | Dépassement en écriture |
C6387 | Valeur de paramètre non valide |
C6388 | Valeur de paramètre non valide |
C6500 | Propriété d'attribut non valide |
C6501 | Valeurs de propriété d'attribut en conflit |
C6503 | Les références ne peuvent pas être Null |
C6504 | Null sur élément non pointeur |
C6505 | MustCheck sur Void |
C6506 | Taille de mémoire tampon sur élément non pointeur ou tableau |
C6508 | Accès en écriture sur constante |
C6509 | Retour utilisé sur condition préalable |
C6510 | Terminaison par Null sur élément non pointeur |
C6511 | MustCheck doit avoir la valeur Yes ou No |
C6513 | Taille d'élément sans taille de mémoire tampon |
C6514 | Taille de mémoire tampon dépasse la taille du tableau |
C6515 | Taille de la mémoire tampon sur élément non pointeur |
C6516 | Attribut sans propriété |
C6517 | Taille valide dans mémoire tampon non lisible |
C6518 | Taille accessible en écriture dans mémoire tampon non accessible en écriture |
C6522 | Type de chaîne de taille non valide |
C6525 | Chaîne de taille non valide. Emplacement inaccessible |
C6527 | Annotation non valide : la propriété NeedsRelease ne doit pas être utilisée sur des valeurs de type void |
C6530 | Style de chaîne de format non reconnu |
C6540 | L'utilisation des annotations d'attribut sur cette fonction rendra non valides toutes ses annotations __declspec existantes |
C6551 | Spécification de taille non valide : expression impossible à analyser |
C6552 | Deref= ou Noref= non valide : expression impossible à analyser |
C6701 | La valeur n'est pas une valeur Yes/No/Maybe valide |
C6702 | La valeur n'est pas une valeur de chaîne |
C6703 | La valeur n'est pas un nombre |
C6704 | Erreur d'expression de l'annotation inattendue |
C6705 | Le nombre d’arguments attendu pour l’annotation ne correspond pas au nombre réel d’arguments pour l’annotation |
C6706 | Erreur d'annotation inattendue pour l'annotation |
C6995 | Échec de l’enregistrement du fichier journal XML |
C26100 | Condition de concurrence |
C26101 | Échec de l’utilisation appropriée de l’opération de verrouillage |
C26110 | Échec de l’appelant à maintenir le verrou |
C26111 | Échec de l’appelant à libérer le verrou |
C26112 | Échec de l’appelant à conserver le verrou |
C26115 | Échec de la libération du verrou |
C26116 | Échec de l’acquisition ou de la conservation du verrou |
C26117 | Libération du verrou non retenu |
C26140 | Erreur d’annotation SAL concurrentiel |
C28020 | L’expression n’a pas la valeur True dans cet appel |
C28021 | Le paramètre annoté doit être un pointeur |
C28022 | Les classes de fonctions sur cette fonction ne correspondent pas aux classes de fonctions sur le typedef utilisé pour les définir. |
C28023 | La fonction affectée ou transmise doit avoir une annotation _Function_class_ pour au moins l’une des classes |
C28024 | Le pointeur de la fonction attribuée est annoté avec la classe de fonction, laquelle n’est pas contenue dans la liste des classes de fonctions. |
C28039 | Le type du paramètre réel doit correspondre exactement au type |
C28112 | Une variable accessible via une fonction verrouillée doit toujours être accessible via une fonction verrouillée. |
C28113 | Accès à une variable locale via une fonction verrouillée |
C28125 | La fonction doit être appelée depuis un bloc try/except |
C28137 | L’argument de la variable devrait plutôt être une constante (littéral) |
C28138 | L’argument de la constante devrait plutôt être une variable |
C28159 | Envisagez plutôt d’utiliser une autre fonction. |
C28160 | annotation d'erreur |
C28163 | La fonction ne doit jamais être appelée depuis un bloc try/except |
C28164 | L’argument est passé à une fonction qui attend un pointeur vers un objet (pas un pointeur vers un pointeur) |
C28182 | Déréférencement du pointeur NULL. Le pointeur contient la même valeur NULL qu'un autre pointeur. |
C28183 | L’argument peut être une valeur et est une copie de la valeur trouvée dans le pointeur |
C28193 | La variable contient une valeur qui doit être examinée |
C28196 | L’exigence n’est pas satisfaite. (L’expression ne prend pas la valeur True.) |
C28202 | Référence non autorisée à un membre non statique |
C28203 | Référence ambiguë à un membre de classe. |
C28205 | _Success_ ou _On_failure_ utilisé dans un contexte non autorisé |
C28206 | L’opérande de gauche pointe vers un struct, utiliser « -> » |
C28207 | L’opérande de gauche est un struct, utiliser '.' |
C28209 | La déclaration pour le symbole possède une déclaration en conflit |
C28210 | Les annotations pour le contexte __on_failure ne doivent pas se trouver dans un contexte préalable explicite |
C28211 | Nom du contexte statique attendu pour SAL_context |
C28212 | Expression de pointeur attendue pour l'annotation |
C28213 | L'annotation _Use_decl_annotations_ doit être utilisée pour référencer, sans modification, une déclaration antérieure. |
C28214 | Les noms des paramètres d'attribut doivent être p1...p9 |
C28215 | Le typefix ne peut pas être appliqué à un paramètre qui contient déjà un typefix |
C28216 | L'annotation checkReturn ne s'applique qu'aux post-conditions pour le paramètre de fonction spécifique. |
C28217 | Pour la fonction, le nombre de paramètres de l'annotation ne correspond pas au nombre trouvé dans le fichier |
C28218 | Pour le paramètre de fonction, le paramètre de l’annotation ne correspond pas au paramètre trouvé dans le fichier |
C28219 | Membre de l'énumération attendu pour une annotation, le paramètre dans l'annotation |
C28220 | Expression d'entier attendue pour une annotation, le paramètre dans l'annotation |
C28221 | Expression de chaîne attendue pour le paramètre dans l'annotation |
C28222 | __yes, __no ou __maybe attendus pour l'annotation |
C28223 | Jeton/identificateur introuvable pour l'annotation, paramètre |
C28224 | L'annotation requiert des paramètres |
C28225 | Nombre correct de paramètres requis introuvable dans l'annotation |
C28226 | L'annotation ne peut pas être également un PrimOp (dans la déclaration actuelle) |
C28227 | L'annotation ne peut pas être également un PrimOp (voir la déclaration antérieure) |
C28228 | Paramètre d'annotation : impossible d'utiliser ce type dans les annotations |
C28229 | L'annotation ne prend pas en charge les paramètres |
C28230 | Le type de paramètre ne contient pas de membre. |
C28231 | L'annotation n'est valide que sur un tableau |
C28232 | pre, post, ou deref ne sont appliqués à aucune annotation |
C28233 | pre, post ou deref sont appliqués à un bloc |
C28234 | l'expression __at ne s'applique pas à la fonction actuelle |
C28235 | La fonction ne peut pas constituer à elle seule une annotation |
C28236 | L'annotation ne peut pas être utilisée dans une expression |
C28237 | L'annotation sur le paramètre n'est plus prise en charge |
C28238 | Plusieurs value, stringValue et longValue sont définies dans l'annotation sur le paramètre. Utiliser paramn=xxx |
C28239 | value, stringValue ou longValue, et paramn=xxx sont définis en même temps dans l'annotation sur le paramètre. Utiliser uniquement paramn=xxx |
C28240 | L'annotation sur le paramètre possède un param2, mais pas de param1 |
C28241 | L'annotation pour la fonction sur le paramètre n'est pas reconnue |
C28243 | L’annotation pour la fonction sur le paramètre nécessite plus de déréférencements que le type réel annoté ne le permet. |
C28244 | L’annotation pour la fonction possède un paramètre non analysable/une annotation externe |
C28245 | L’annotation pour la fonction annote ’this’ sur une fonction non membre |
C28246 | L'annotation du paramètre ne correspond pas au type du paramètre |
C28250 | Annotation incohérente pour une fonction : l'instance précédente contient une erreur. |
C28251 | Annotation incohérente pour une fonction : cette instance contient une erreur. |
C28252 | Annotation incohérente pour une fonction : le paramètre contient d'autres annotations sur cette instance. |
C28253 | Annotation incohérente pour une fonction : le paramètre contient d'autres annotations sur cette instance. |
C28254 | dynamic_cast<>() n’est pas pris en charge dans les annotations |
C28262 | Une erreur de syntaxe dans l'annotation a été trouvée dans la fonction, pour l'annotation |
C28263 | Une erreur de syntaxe dans une annotation conditionnelle a été trouvée pour l'annotation intrinsèque |
C28267 | Une erreur de syntaxe dans les annotations a été trouvée pour l'annotation dans la fonction. |
C28272 | L'annotation pour la fonction, paramètre pendant la vérification est incohérente avec la déclaration de fonction |
C28273 | Pour la fonction, les indices sont incohérents avec la déclaration de fonction |
C28275 | Le paramètre de _Macro_value_ a la valeur null |
C28279 | Pour le symbole, un 'begin' a été trouvé sans le 'end' correspondant |
C28280 | Pour le symbole, un 'end' a été trouvé sans le 'begin' correspondant |
C28282 | Les chaînes de format doivent être comprises dans des conditions préalables |
C28285 | Pour la fonction, erreur de syntaxe dans le paramètre |
C28286 | Pour la fonction, erreur de syntaxe près de la fin |
C28287 | Pour la fonction, erreur de syntaxe dans l'annotation _At_() (nom de paramètre non reconnu) |
C28288 | Pour la fonction, erreur de syntaxe dans l'annotation _At_() (nom de paramètre non valide) |
C28289 | Pour la fonction : ReadableTo ou WritableTo n'a pas eu de spécification de limites en tant que paramètre |
C28290 | l'annotation pour la fonction contient plus d'Externals que le nombre réel de paramètres |
C28291 | post null/notnull au niveau 0 deref n'a pas de sens pour la fonction. |
C28300 | Opérandes d’expression de types incompatibles pour l’opérateur |
C28301 | Aucune annotation pour la première déclaration de la fonction. |
C28302 | Un opérateur extra _Deref_ a été trouvé dans une annotation. |
C28303 | Un opérateur _Deref_ ambigu a été trouvé dans une annotation. |
C28304 | Un opérateur _Notref_ placé de manière incorrecte et appliqué à un jeton a été trouvé. |
C28305 | Une erreur a été détectée pendant l'analyse d'un jeton. |
C28306 | L’annotation sur le paramètre est obsolète |
C28307 | L’annotation sur le paramètre est obsolète |
C28350 | L'annotation décrit une situation qui n'est pas applicable de manière conditionnelle. |
C28351 | L'annotation décrit l'emplacement auquel une valeur dynamique (une variable) ne peut pas être utilisée dans la condition. |
CA1001 | Les types qui possèdent des champs supprimables doivent être supprimables |
CA1009 | Déclarer les gestionnaires d'événements correctement |
CA1016 | Marquer les assemblys avec AssemblyVersionAttribute |
CA1033 | Les méthodes d'interface doivent pouvoir être appelées par les types enfants |
CA1049 | Les types qui possèdent des ressources natives doivent être supprimables |
CA1060 | Déplacer les P/Invoke vers une classe NativeMethods |
CA1061 | Ne pas masquer les méthodes de la classe de base |
CA1063 | Implémenter IDisposable correctement |
CA1065 | Ne pas lever d'exceptions dans les emplacements inattendus |
CA1301 | Éviter les accélérateurs en double |
CA1400 | Des points d'entrée P/Invoke doivent exister |
CA1401 | Les P/Invoke ne doivent pas être visibles |
CA1403 | Les types Structurer automatiquement ne doivent pas être visibles par COM |
CA1404 | Appeler GetLastError immédiatement après P/Invoke |
CA1405 | Les types de base type visibles par COM doivent être visibles par COM |
CA1410 | Les méthodes d'inscription COM doivent être mises en correspondance |
CA1415 | Déclarer correctement les méthodes P/Invoke |
CA1821 | Supprimez les finaliseurs vides |
CA1900 | Les champs de type valeur doivent être portables |
CA1901 | Les déclarations P/Invoke doivent être portables |
CA2002 | Ne définissez pas un verrou sur des objets à identité faible |
CA2100 | Vérifier si les requêtes SQL présentent des failles de sécurité |
CA2101 | Spécifiez le marshaling pour les arguments de chaîne P/Invoke |
CA2108 | Vérifiez la sécurité déclarative dans les types valeur |
CA2111 | Les pointeurs ne doivent pas être visibles |
CA2112 | Les types sécurisés ne doivent pas exposer de champs |
CA2114 | La sécurité de la méthode doit être un sur-ensemble du type |
CA2116 | Les méthodes APTCA doivent uniquement appeler des méthodes APTCA |
CA2117 | Les types APTCA doivent uniquement étendre des types de base APTCA |
CA2122 | N'exposez pas indirectement des méthodes avec des demandes de liaison |
CA2123 | Les demandes de liaison de substitution doivent être identiques au composant de base |
CA2124 | Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe |
CA2126 | Les demandes de liaison de type exigent des demandes d'héritage |
CA2131 | Les types critiques de sécurité ne peuvent pas participer à l'équivalence des types |
CA2132 | Les constructeurs par défaut doivent être au moins aussi critiques que les constructeurs par défaut de type de base |
CA2133 | Les délégués doivent lier les méthodes avec une transparence cohérente |
CA2134 | La transparence des méthodes doit rester cohérente lors de la substitution de méthodes de base |
CA2137 | Les méthodes transparentes doivent contenir uniquement des IL vérifiables |
CA2138 | Les méthodes transparentes ne doivent pas appeler les méthodes ayant l'attribut SuppressUnmanagedCodeSecurity |
CA2140 | Le code transparent ne doit pas faire référence à des éléments critiques de sécurité |
CA2141 | Les méthodes transparentes ne doivent pas répondre aux LinkDemands |
CA2146 | Les types doivent être au moins aussi critiques que les types de base et les interfaces |
CA2147 | Les méthodes transparentes ne peuvent pas utiliser d’assertions de sécurité |
CA2149 | Les méthodes transparentes ne doivent pas appeler du code natif |
CA2200 | Levez à nouveau une exception pour conserver les détails de la pile |
CA2202 | Ne pas supprimer d'objets plusieurs fois |
CA2207 | Initialisez les champs statiques des types valeur en ligne |
CA2212 | Ne marquez pas les composants pris en charge avec webMethod |
CA2213 | Les champs pouvant être supprimés doivent l’être |
CA2214 | N'appelez pas de méthodes substituables dans les constructeurs |
CA2216 | Les types pouvant être supprimés doivent déclarer un finaliseur |
CA2220 | Les finaliseurs doivent appeler le finaliseur de leur classe de base |
CA2229 | Implémentez des constructeurs de sérialisation |
CA2231 | Surchargez l’opérateur égal (equals) en remplaçant ValueType.Equals |
CA2232 | Marquez les points d'entrée Windows Forms avec STAThread |
CA2235 | Marquez tous les champs non sérialisés |
CA2236 | Appelez les méthodes de la classe de base sur les types ISerializable |
CA2237 | Marquer les types ISerializable avec SerializableAttribute |
CA2238 | Implémentez les méthodes de sérialisation comme il se doit |
CA2240 | Implémentez ISerializable comme il se doit |
CA2241 | Indiquer le nombre correct d'arguments dans les méthodes de mise en forme |
CA2242 | Effectuez correctement des tests NaN |
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