SAL аннотации и параметры указателя

Я читал о SAL, и мне не ясно, применяются ли аннотации к типам указателей к ссылке или к значению, на которое она указывает. Например, если у меня есть:

void f(_In_ type* t);

_In_ означает "Параметр должен быть действительным в предварительном состоянии и не будет изменен". Означает ли его применение здесь, что адрес t не изменится, или значение t?

1 ответ

Решение

В вашем примере _In_ Значит это

  • VS Code Analysis проверит, что вызывающие стороны передают ненулевой указатель в инициализированный буфер.
  • VS Code Analysis не подтвердит, что t проверяется на нулевое значение перед разыменованием его в функции; t предполагается, что не является нулевым в самой функции. Путем изменения _In_ в _In_opt_, VS Code Analysis подтвердит, что t проверяется на нулевое значение перед разыменованием.
  • VS Code Analysis проверит, что функция читает только "один элемент" из type из памяти, на которую указывает t как присвоение значения разыменованного указателя переменной.
Другие вопросы по тегам