Freigeben über


C6507

Aktualisiert: November 2007

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 in der Vor- und Nachbedingung miteinander in Konflikt stehende Werte für die Null-Eigenschaft bei der standardmäßigen Dereferenzierungsebene 0 (null) 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