Partager via


C6507

avertissement C6507 : conflit d'annotation : la propriété Null définie sur Deref=0 dans une condition préalable doit être un sous-ensemble de la propriété Null dans la précondition

Cet avertissement indique que les valeurs incompatibles pour la propriété Null ont été utilisées dans des conditions préalables et Post au niveau 0 de déréférence par défaut. Dans ce cas, la condition préalable spécifie Null=No, et la condition Post Null=Yes. Le paramètre n'étant pas passé par la référence il ne peut pas être modifié ; par conséquent, la condition Post ne peut pas utiliser Null=Yes.

Exemple

Le code suivant génère cet avertissement parce que Deref=0 s'applique au pointeur et pas le pointeur au caractère :

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ([SA_Pre(Null=SA_No)] [SA_Post(Null=SA_Yes)] char *pc); 

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f([Pre(Null=No)] [Post(Null=Yes)] char *pc); 

Pour corriger cet avertissement, modifiez l'attribut Pre ou utilisez la double indirection si vous souhaitez modifier le pointeur qui pointe sur les caractères, comme le montre le code suivant :

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f1 ([SA_Pre(Null=SA_Maybe)] [SA_Post(Null=SA_Yes)] char *pc); 
// or
void f2 ([SA_Pre(Deref=1, Null=SA_No)] [SA_Post(Null=SA_Yes)] char **pc);

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f1([Pre(Null=Maybe)] [Post(Null=Yes)] char *pc);
// or 
void f2 ([Pre(Deref=1, Null=No)] [Post(Null=Yes)] char **pc);

Il est possible de spécifier Pre ( Null=Maybe ) et Post( Null=No ). Ceci est utile pour les fonctions qui peuvent lever des exceptions si le pointeur est null :

Voir aussi

Autres ressources

Propriétés d'annotation