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 не будет создавать какие-либо внутренние конструкции, подобные этой, в своих компиляторах.