Поделиться через


Предупреждение 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)
  {
    //...
  }
}