Advertencia C28220
Expresión entera esperada para la anotación "annotation"
Esta advertencia indica que se esperaba una expresión entera como parámetro de anotación, pero en su lugar se usó un tipo incompatible. Puede deberse a que intenta usar una macro de anotación SAL que no se ajusta al escenario actual.
Ejemplo
#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)
{
//...
}
}
En este ejemplo, la intención del desarrollador era indicar que buffer
se leería hasta el last
elemento . La _In_reads_
anotación no corrige el escenario porque se usa para indicar un tamaño de búfer en el número de elementos. La anotación correcta es _In_reads_to_ptr_
, que indica el final del búfer con un puntero.
Si no hubiera ningún equivalente de _to_ptr_
a la anotación usada, la advertencia podría haberse solucionado convirtiendo el puntero last
en un valor de tamaño con (buffer - size)
en la anotación.
#include <sal.h>
void f(_In_reads_to_ptr_(last) const int *buffer, const int *last)
{
for(; buffer < last; ++buffer)
{
//...
}
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de