Какова цель __in __out __in_opt __alled (), как они работают? Должен ли я использовать подобные конструкции в моем собственном коде?

StackOverflow https://stackoverflow.com/questions/4239809

  •  27-09-2019
  •  | 
  •  

Вопрос

Некоторые из этих определений препроцессора в функции WinMain и других функциях библиотеки Windows. Какова их цель? Как они работают? И это хорошая практика, чтобы написать их в вашим реализациям или функциям?

Мои первоначальные исследования предполагают, что они просто создают экскуляленте:

#define __in 
#define __out
#define __in_opt

Это означает, что они заменяются на ничего на препроцессорном проходе. Они просто метод документации без какой-либо функциональности?

Если это так, я могу видеть преимущество для документирования кода в том, что в строке такого. С чем-то вроде Doxygen вам нужно дважды выписать имена параметров. Так что это может в теории помочь уменьшить дублирование и поддерживать последовательность ...

У меня нет теории для того, как __allowed() Предполагается работать.

Это было полезно?

Решение

Это SAL аннотации в языке аннотации кода исходного кода. Microsoft Tooling зависит от него. Статья библиотеки MSDN здесь. Отказ Хороший пример Анализ кода. Отказ Еще один довольно неродственный инструмент, но уполномочен этими аннотациями, является помощником PinVoke Interops.

Другие советы

Аннотации SAL полезны для двух вещей:

  • Статический анализ через Prefaff (компилировать с / анализировать)
  • Человеческие читатели могут посмотреть на аннотации и выяснить, как должна называться функция, и быстро определяет параметры ввода / вывода.

Макросы на самом деле расширяются для различных выражений DELLSPEC, когда ваш код скомпилирован с анализом. Я использую эти аннотации все время в моем коде.

Они используются в инструменте семантического анализа Microsoft в качестве разметки кода. Если вы не планируете использовать этот инструмент самостоятельно, есть мало цели в использовании.

Эти Microsoft Macros обычно не распространяются ни к ним, а подсказки для читателя.

Однако в прошлый раз я проверил, например, намекание на MessageBox Аргументы были совершенно неправильными, намекая на то, что первый, второй и третий аргумент имел полезные значения по умолчанию (когда вы указываете 0), в то время как на самом деле это первый и четвертый аргумент, которые имеют полезные значения по умолчанию. Может быть, также аргумент заголовка, который по умолчанию имеет «ошибку», но я никогда не обнаружил, что полезно. Итак, это просто Microsoft, намекает, что вы не можете и не должны полагаться, просто вводит в заблуждение визуального беспорядка.

Ура и хет.,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top