C6507

警告 C6507:批注冲突: 后置条件中 Deref=0 处的 Null 属性必须是前置条件中 Null 属性的一个子集

此警告意味着在默认的取消引用级别 0,在前置条件和后置条件中使用了冲突的 Null 属性值。 在本例中,前置条件指定 Null=No,后置条件指定 Null=Yes。 因为参数不是通过引用传递的,所以不能对它进行更改;因此,后置条件不能使用 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 时可能引发异常的函数非常有用:

请参见

其他资源

批注属性