Поделиться через


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.

См. также

Другие ресурсы

Свойства заметок