атрибуты — 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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]