Condividi tramite


Avviso C28220

Espressione integer prevista per l'annotazione 'annotation'

Questo avviso indica che è stata prevista un'espressione integer come parametro di annotazione, ma è stato usato un tipo incompatibile. Può essere causato dal tentativo di usare una macro di annotazione SAL che non rientra nello scenario corrente.

Esempio

#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)
  {
    //...
  }
}

In questo esempio, lo scopo dello sviluppatore era indicare che buffer sarebbe stato letto fino all'elemento last . L'annotazione _In_reads_ non risolve lo scenario perché viene usato per indicare una dimensione del buffer in numero di elementi. L'annotazione corretta è _In_reads_to_ptr_, che indica la fine del buffer con un puntatore.

Se non esiste un _to_ptr_ equivalente all'annotazione usata, l'avviso potrebbe essere stato risolto convertendo il last puntatore in un valore di dimensione con (buffer - size) nell'annotazione.

#include <sal.h>

void f(_In_reads_to_ptr_(last) const int *buffer, const int *last)
{
  for(; buffer < last; ++buffer)
  {
    //...
  }
}