Share via


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);
}

Consulte también