Поделиться через


Указание дополнительных сведений о коде с помощью _Analysis_assume_

Вы можете указать подсказки средству анализа кода для кода C/C++, помогающего процессу анализа и уменьшению предупреждений. Чтобы предоставить дополнительные сведения, используйте следующий макрос функции:

_Analysis_assume_( expr )

expr — любое выражение, которое предполагается оценить значение true.

Средство анализа кода предполагает, что условие, представленное выражением expr , имеет значение true в точке, в которой отображается функция. И он остается верным, пока не expr изменится, например путем назначения переменной.

Примечание.

_Analysis_assume_ не влияет на оптимизацию кода. Вне средства _Analysis_assume_ анализа кода определяется как no-op.

Пример

Следующий код используется _Analysis_assume_ для исправления предупреждения анализа кода C6388:

#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_ следует использовать в качестве последнего средства. Сначала следует попытаться сделать контракты функций более точными. В этом случае можно улучшить контракт FreeAndNull вместо использования _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);
}

См. также