Partager via


C6507

Mise à jour : novembre 2007

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 des valeurs incompatibles pour la propriété Null ont été utilisées dans les conditions Pre et Post au niveau de déréférencement par défaut 0. Dans ce cas, la condition Pre spécifie Null=No, et la condition Post spécifie 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 ([Pre(Null=SA_No)] [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 ([Pre(Null=SA_Maybe)] [Post(Null=SA_Yes)] char *pc); 
// or
void f2 ([Pre(Deref=1, Null=SA_No)] [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