C6507
Aviso C6507: conflito de anotação: Propriedade pelo Deref nulo = 0 em uma POST condição deve ser um subconjunto da propriedade NULL a pré-condição
Este aviso indica que foram usados valores conflitantes para a propriedade nulo no pré e Post-condições no padrão cancelar a referência de nível 0.Nesse caso a condição pré Especifica nulo = no, e a condição de POST Especifica nulo = Yes.Como o parâmetro não é passado por referência não pode ser alterado; portanto, a condição de POST não é possível usar nulo = Yes.
Exemplo
O código a seguir gera este aviso porque Deref = 0 aplica-se ao ponteiro e não o ponteiro de caractere:
// 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);
Para corrigir esse aviso, modifique o atributo pré ou usar indireção dupla se desejar alterar o ponteiro que aponta para sistema autônomo caracteres, conforme mostrado no código a seguir:
// 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);
Ele é válido para especificar pré (nulo = talvez) e remessa (nulo = não).Isso é útil para funções que podem lançar exceções se o ponteiro for nulo: