C6507
警告 C6507: 注釈の競合です: 後条件の Deref=0 での Null プロパティは、前提条件での Null プロパティのサブセットでなければなりません
この警告は、既定の逆参照レベル 0 で、Pre 条件および Post 条件において Null プロパティの競合する値が使用されたことを示します。 この場合、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 の場合に例外をスローする関数に対して有用です。