Предупреждение C28220
Целочисленное выражение, ожидаемое для заметки "заметка"
Это предупреждение указывает, что целочисленное выражение ожидалось в качестве параметра заметки, но вместо этого использовался несовместимый тип. Это может быть вызвано попыткой использовать макрос заметки SAL, который не соответствует текущему сценарию.
Пример
#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)
{
//...
}
}
В этом примере разработчик должен был указать, что buffer
будет считываться до last
элемента. Заметка _In_reads_
не исправляет сценарий, так как он используется для указания размера буфера в количестве элементов. Правильная заметка , _In_reads_to_ptr_
которая указывает конец буфера с указателем.
Если не было _to_ptr_
эквивалента используемой заметки, предупреждение может быть устранено путем преобразования last
указателя в значение размера с (buffer - size)
заметкой.
#include <sal.h>
void f(_In_reads_to_ptr_(last) const int *buffer, const int *last)
{
for(; buffer < last; ++buffer)
{
//...
}
}