C++ source_annotation_attribute

Просматривая исходный код .NET Framework 4.7 с открытым исходным кодом, я наткнулся на заголовок C++. sal.h и нашел строку кода, говорящую [source_annotation_attribute( SA( Method ) )] что похоже на атрибуты и AttributesUsage класс в C#.

Теперь я знаю, что, как правило, в C++ нет пользовательских атрибутов, как в C#, и я предположил, что [source_annotation_attribute( SA( Method ) )] это просто макрос, но он не определен ни в sal.h ни в каких других заголовках, так какsal.hне#includeлюбой.

Мое следующее предположение, что[source_annotation_attribute]на самом деле встроен в MSVC, как например, для[[noreturn]] приписывать.

Я был бы рад, если бы кто-то мог пролить некоторый свет на то, что это на самом деле, и если бы я мог объявить свои собственные атрибуты, подобные этим, если он не встроен в компилятор. Если вы хотите увидеть для себя, конкретный файл \Source\externalapis\legacy\vctools\vc12\inc\vc\sal.h и атрибут встречается (среди прочих) в строке 1934,

Вот пример использования в sal.h:

[source_annotation_attribute( SA( Method ) )]
struct __M_
{
#ifdef __cplusplus // [
    __M_();
#endif // ]
   int __d_;
};
typedef struct __M_ __M_;

Спасибо заранее.

1 ответ

Решение

Чтобы завершить то, что @VTT уже сказал, похоже, что source_annotation_attribute является встроенной конструкцией компилятора, которая поставляется как часть расширения Microsoft до C++ (даже если она там не упоминается, потому что это деталь реализации, предназначенная только для внутреннего использования), которая действительна только при компиляции с переключателем компилятора /Ze

Что добавляет к этому то, что Microsofts SAL глубоко встроен в Visual Studio, т.е.

Построить -> выполнить анализ кода в решении, и поскольку Visual Studio (очевидно) использует свой компилятор MSVC, не исключено, что Microsoft не будет создавать какие-либо внутренние конструкции, подобные этой, в своих компиляторах.

Другие вопросы по тегам