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