Значение __in, __out, __in_opt
Что означают эти ключевые слова, используемые перед переменными в параметрах функции?
__in
__out
__in_opt
2 ответа
Это некоторые из более старых макросов оформления из аннотаций SAL от Microsoft ( более новые теперь следуют другому регистру, начиная с заглавной). Они не оказывают реального влияния на компиляцию (в VS 2010 они даже не расширяются), они есть для встроенной документации API.
__in
: этот параметр является входом для функции (только для чтения, инициализирован вызывающей стороной).__out
: этот параметр содержит выходные данные функции, когда она возвращается (только для записи, инициализированная вызывающая сторона).__in_opt
: составная аннотация, образованная из_in
а также_opt
,_opt
указывает на то, что параметр является необязательным и может быть установлен в значение по умолчанию (обычноNULL
).
Вы можете получить полное объяснение здесь старых украшений здесь.
Как отвечает Nercolis, это атрибуты аннотаций SAL. Тем не менее, они не только для внутренней или только для документации API. Настоящая цель для анализа кода. Когда вы строите проект с параметром компилятора / анализировать (Свойства проекта, Анализ кода -> Общие), они играют важную роль в поиске проблем кодирования.
Например, если конкретный аргумент указателя говорит __in
тогда ему нельзя передавать нулевой указатель. Функция не будет проверять на ноль и может вызвать SEH. __in_opt
аргумент может быть нулевым. Когда компилятор обнаруживает какую-либо проблему, он сообщает об этом как предупреждение. Смотрите эту статью.