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
как присвоение значения разыменованного указателя переменной.