Avertissement C28220
Expression entière attendue pour l’annotation 'annotation'
Cet avertissement indique qu’une expression entière était attendue comme paramètre d’annotation, mais qu’un type incompatible a été utilisé à la place. Cela peut être dû à une tentative d’utilisation d’une macro d’annotation SAL qui ne correspond pas au scénario actuel.
Exemple
#include <sal.h>
// Oops, the _In_reads_ annotation takes an integer type but is being passed a pointer
void f(_In_reads_(last) const int *buffer, const int *last)
{
for(; buffer < last; ++buffer)
{
//...
}
}
Dans cet exemple, l’intention du développeur était d’indiquer qu’elle buffer
serait lue jusqu’à l’élément last
. L’annotation _In_reads_
ne résout pas le scénario, car elle est utilisée pour indiquer une taille de mémoire tampon en nombre d’éléments. L’annotation correcte est _In_reads_to_ptr_
, ce qui indique la fin de la mémoire tampon avec un pointeur.
S’il n’y avait pas _to_ptr_
d’équivalent à l’annotation utilisée, l’avertissement aurait pu être traité en convertissant le last
pointeur en valeur de taille avec (buffer - size)
dans l’annotation.
#include <sal.h>
void f(_In_reads_to_ptr_(last) const int *buffer, const int *last)
{
for(; buffer < last; ++buffer)
{
//...
}
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour