C6507
[Cette documentation constitue un aperçu et peut faire l'objet de modifications avec les versions ultérieures. Blank topics are included as placeholders.]
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 :