C6507
Обновлен: Ноябрь 2007
C6507
Предупреждение C6507: конфликт аннотации. Свойство Null с Deref=0 в условии Post должно быть подмножеством свойства Null в условии Pre.
Это предупреждение означает, что в условиях Pre и Post используются конфликтующие значения свойства Null на уровне разыменования по умолчанию 0. В данном случае в условии Pre Null=No, а в условии Post Null=Yes. Этот параметр не передается ссылкой, поэтому его нельзя изменить. Следовательно, условие Post не может использовать Null=Yes.
Пример
В следующем примере кода возникает это предупреждение, поскольку Deref=0 применяется к указателю, а не к указателю на символ.
// 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);
Чтобы исправить это предупреждение, следует либо изменить атрибут Pre или использовать двойной косвенный оператор, если нужно изменить указатель, указывающий на символы, как показано в следующем примере кода.
// 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);
Можно указать Pre ( Null=Maybe ) и Post( Null=No ). Это полезно для функций, которые могут создавать исключения, если указатель равен Null.