Указание дополнительных сведений о коде с помощью _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);
}