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 wird "true" wie folgt wieder Standard, bis expr er 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);
}

Siehe auch