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