То, что вы видите, это то, что вы вставили предварительно обработанную версию объявления isalpha. То, что я вижу в ctype.h:
_Check_return_ _CRT_JIT_INTRINSIC _CRTIMP int __cdecl isalpha(_In_ int _C);
_In_
разрешено для скалярных параметров (int и т. Д.), Чтобы позволить разработчикам явно выразить, что параметр является строго входным параметром. Это отчасти избыточно, но все же верно (в конце концов, вы не можете вернуть значение через скаляр передачи по значению).
Аннотация _In_
- это макрос, который расширяется, как вы вставили выше, чтобы выразить семантику входного указателя . Статический анализатор распознает, когда _In_
применяется к скалярному параметру, и игнорирует его, поскольку ни пустое значение, ни значение Deref = 1 не имеют большого смысла для типа int.
В любом другом контексте, кроме того, что он является частью аннотации _In_
, значение Deref = 1 для int не имеет смысла.
Как правило, лучше использовать синтаксис в стиле _In_
, а не SA_Pre и SA_Post, если вы действительно не хотите изучать основные детали реализации, подобные этой.