C6507
警告 C6507: 附註衝突: 後續條件上的 Deref=0 的 Null 屬性,必須是先前條件上 Null 屬性的子集
這則警告指出,Null 屬性的衝突值是用於預設之取值 (Dereference) 層級 0 上的 Pre 條件和 Post 條件中。 在此情況下,Pre 條件會指定 Null=No,且 Post 條件會指定 Null=Yes。 因為參數並未以傳址 (By Reference) 方式傳遞,所以無法變更。因此 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 屬性 (Attribute) 或是使用兩次間接取值 (Indirection),如下列程式碼所示:
// 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,則對可能會擲回例外狀況的函式而言,這會很有用: