Comment spécifier des informations de code supplémentaires à l’aide de _Analysis_assume_

Vous pouvez fournir des conseils à l’outil d’analyse du code pour le code C/C++ qui aident le processus d’analyse et réduisent les avertissements. Pour fournir des informations supplémentaires, utilisez la macro de fonction suivante :

_Analysis_assume_( expr )

expr - toute expression supposée évaluer la valeur true.

L’outil d’analyse du code suppose que la condition représentée par l’expression expr est vraie au point où la fonction apparaît. Elle reste vraie jusqu’à ce qu’elle expr soit modifiée, par exemple, par affectation à une variable.

Remarque

_Analysis_assume_ n’affecte pas l’optimisation du code. En dehors de l’outil d’analyse du code, _Analysis_assume_ il est défini comme une opération sans opération.

Exemple

Le code suivant utilise _Analysis_assume_ pour corriger l’avertissement d’analyse du code 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_ doit être utilisé comme dernier recours. Nous devrions d’abord essayer de rendre les contrats des fonctions plus précises. Dans ce cas, nous pourrions améliorer le contrat au lieu d’utiliser 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);
}

Voir aussi