Angeben zusätzlicher Codeinformationen mithilfe von _Analysis_assume_
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);
}