При просмотре источника с открытым исходным кодом .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_;
Спасибо заранее.
Чтобы завершить то, что @VTT уже сказал, похоже, что source_annotation_attribute
это встроенная конструкция компилятора, которая поставляется как часть Расширение Microsoft на C ++
(даже если он там не упоминается, потому что это деталь реализации, предназначенная только для внутреннего использования), которая действительна только при компиляции с переключателем компилятора /Ze
Что добавляет к этому тот факт, что Microsoft SAL глубоко встроен в Visual Studio
то есть
Построить -> выполнить анализ кода в решении
и поскольку Visual Studio (очевидно) использует свой компилятор MSVC, не исключено, что Microsoft не будет создавать какие-либо внутренние конструкции, подобные этой, в своих компиляторах.
Других решений пока нет …