Condividi tramite


C6507

Aggiornamento: novembre 2007

C6507

avviso C6507: conflitto di annotazioni: la proprietà Null in Deref=0 su una postcondizione deve essere un sottoinsieme della proprietà Null sulla precondizione

Questo avviso indica che i valori in conflitto relativi alla proprietà Null sono stati utilizzati in precondizioni e postcondizioni al livello di risoluzione del riferimento 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:

Vedere anche

Altre risorse

Proprietà di annotazione