Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Angeben zusätzlicher Codeinformationen mithilfe von
Sie können Hinweise auf das Codeanalysetool für C/C++-Code bereitstellen, der den Analyseprozess unterstützt und Warnungen reduziert. Verwenden Sie das folgende Funktionsmakro, um zusätzliche Informationen bereitzustellen:
_Analysis_assume_( expr )
expr - Ein beliebiger Ausdruck, der als "wahr" ausgewertet wird.
Das Codeanalysetool geht davon aus, dass die durch den Ausdruck expr dargestellte Bedingung an dem Punkt wahr ist, an dem die Funktion angezeigt wird. Und es bleibt wahr, bis expr sie geändert wird, z. B. durch Zuweisung zu einer Variablen.
Hinweis
_Analysis_assume_ wirkt sich nicht auf die Codeoptimierung aus. Außerhalb des Codeanalysetools _Analysis_assume_ wird als No-Op definiert.
Beispiel
Der folgende Code verwendet _Analysis_assume_ , um die Codeanalysewarnung C6388 zu korrigieren:
#include <windows.h>
#include <sal.h>
// Requires pc to be null.
void f(_Pre_null_ char* pc);
// Calls free and sets ch to null.
void FreeAndNull(char** ch);
void test()
{
char* pc = (char*)malloc(5);
FreeAndNull(&pc);
_Analysis_assume_(pc == NULL);
f(pc);
}
_Analysis_assume_ sollte als letzte Möglichkeit verwendet werden. Wir sollten zunächst versuchen, die Verträge der Funktionen genauer zu gestalten. In diesem Fall könnten wir den Vertrag FreeAndNull verbessern, anstatt folgendes zu verwenden _Analysis_assume_:
#include <windows.h>
#include <sal.h>
// Requires pc to be null.
void f(_Pre_null_ char* pc);
// Calls free and sets ch to null.
_At_(*ch, _Post_null_)
void FreeAndNull(char** ch);
void test()
{
char* pc = (char*)malloc(5);
FreeAndNull(&pc);
f(pc);
}