Freigeben über


C6507

Warnung C6507: Anmerkungskonflikt: Die Null-Eigenschaft bei Deref=0 einer Postbedingung muss eine Teilmenge der Null-Eigenschaft der Vorbedingung sein.

Diese Warnung gibt an, dass auf der Standarddereferenzierungsebene 0 in Vor- und Nachbedingungen in Konflikt stehende Werte für die NULL-Eigenschaft verwendet wurden. In diesem Fall gibt die Vorbedingung Null=No und die Nachbedingung Null=Yes an. Da der Parameter nicht als Verweis übergeben wird, kann er nicht geändert werden. Daher kann die Nachbedingung nicht Null=Yes verwenden.

Beispiel

Im folgenden Code wird diese Warnung generiert, weil Deref=0 für den Zeiger gilt und nicht für den Zeiger auf Zeichen:

// 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); 

Um diese Warnung zu korrigieren, können Sie das Pre-Attribut ändern, oder Sie verwenden die doppelte Dereferenzierung, wenn Sie den Zeiger ändern möchten, der auf die Zeichen verweist, wie im folgenden Code dargestellt:

// 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);

Es ist zulässig, Pre(Null=Maybe) und Post(Null=No) anzugeben. Dies ist hilfreich bei Funktionen, die möglicherweise Ausnahmen auslösen, wenn der Zeiger NULL ist:

Siehe auch

Weitere Ressourcen

Anmerkungseigenschaften