Freigeben über


Warnung C28220

Ganzzahliger Ausdruck für anmerkung "annotation" erwartet

Diese Warnung gibt an, dass ein ganzzahliger Ausdruck als Anmerkungsparameter erwartet wurde, aber stattdessen ein inkompatibler Typ verwendet wurde. Dies kann durch den Versuch verursacht werden, ein SAL-Anmerkungsmakro zu verwenden, das nicht zum aktuellen Szenario passt.

Beispiel

#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 diesem Beispiel war die Absicht des Entwicklers anzugeben, dass buffer das Element gelesen last werden würde. Die _In_reads_ Anmerkung korrigiert das Szenario nicht, da sie verwendet wird, um eine Puffergröße in der Anzahl von Elementen anzugeben. Die richtige Anmerkung ist _In_reads_to_ptr_, die das Ende des Puffers mit einem Zeiger angibt.

Wenn keine _to_ptr_ Entsprechung mit der verwendeten Anmerkung vorhanden war, könnte die Warnung behoben werden, indem der last Zeiger in einen Größenwert mit (buffer - size) der Anmerkung konvertiert wurde.

#include <sal.h>

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