C6507
avviso C6507: conflitto di annotazioni: la proprietà Null in Deref=0 su una postcondizione deve essere un sottoinsieme della proprietà Null sulla precondizione
L'avviso indica che i valori in conflitto relativi alla proprietà Null sono stati utilizzati in precondizioni e postcondizioni al livello di dereferenziazione predefinito 0. In questo caso la precondizione specifica Null=No e la postcondizione specifica Null=Yes. Dal momento che il parametro non viene passato per riferimento non è possibile modificarlo. Pertanto, la postcondizione non può utilizzare Null=Yes.
Esempio
Nel codice illustrato di seguito viene generato l'avviso in quanto Deref=0 si applica al puntatore e non al puntatore al carattere.
// 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);
Per risolvere il problema, modificare l'attributo Pre oppure utilizzare il riferimento indiretto doppio per modificare il puntatore che fa riferimento ai caratteri, come illustrato nel codice riportato di seguito.
// 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);
È valido specificare Pre ( Null=Maybe ) e Post( Null=No ). Ciò è particolarmente utile per le funzioni che potrebbero generare eccezioni se il puntatore è null: