Cómo especificar información de código adicional mediante _Analysis_assume_
Puede proporcionar sugerencias a la herramienta de análisis de código para el código de C/C++ que ayudan al proceso de análisis y a reducir las advertencias. Para proporcionar información adicional, use la siguiente macro de función:
_Analysis_assume_( expr )
expr
: cualquier expresión que se supone que se evalúa como verdadera.
La herramienta de análisis de código da por hecho que la condición representada por la expresión expr
es verdadera en el punto donde aparece la función. Y, sigue siendo verdadera hasta que se modifica expr
, por ejemplo, mediante la asignación a una variable.
Nota:
_Analysis_assume_
no afecta a la optimización del código. Fuera de la herramienta de análisis de código, _Analysis_assume_
se define como un elemento sin operación.
Ejemplo
El código siguiente usa _Analysis_assume_
para corregir la advertencia de análisis de código 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_
debe usarse como último recurso. Primero debemos intentar hacer que los contratos de las funciones sean más precisos. En este caso, podríamos mejorar el contrato de FreeAndNull
en lugar de usar _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);
}