__declspec
Блок, относящийся только к системам Майкрософт
Синтаксис расширенного атрибута для указания сведений о классе хранилища использует __declspec
ключевое слово, который указывает, что экземпляр заданного типа должен храниться с помощью атрибута класса хранилища, указанного ниже. Примеры других модификаторов класса хранения включают ключевые слова static
и extern
. Однако эти ключевое слово являются частью спецификации ANSI языков C и C++ и, как таковые, не охватываются расширенным синтаксисом атрибутов. Расширенный синтаксис атрибутов упрощает и стандартизирует расширения для систем Microsoft в соответствии с правилами языков C и С++.
грамматики
decl-specifier
:
__declspec (
extended-decl-modifier-seq
)
extended-decl-modifier-seq
:
extended-decl-modifier
необ.
extended-decl-modifier
extended-decl-modifier-seq
extended-decl-modifier
:
align(
number)
allocate("
segname")
allocator
appdomain
code_seg("
segname")
deprecated
dllimport
dllexport
empty_bases
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
no_sanitize_address
process
property(
{ get=
get-func-name,put=
| put-func-name })
restrict
safebuffers
selectany
spectre(nomitigation)
thread
uuid("
ComObjectGUID")
Пробел отделяет последовательность модификаторов объявления. Примеры приведены в дальнейших разделах.
Расширенная грамматика атрибутов поддерживает следующие атрибуты класса хранилища майкрософт: align
, allocator
allocate
appdomain
code_seg
deprecated
dllexport
dllimport
empty_bases
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
no_sanitize_address
process
restrict
safebuffers
selectany
spectre
thread
Он также поддерживает следующие атрибуты COM-объекта: property
и uuid
.
code_seg
Атрибуты класса , empty_bases
dllimport
noalias
nothrow
no_sanitize_address
naked
dllexport
restrict
selectany
property
thread
и uuid
класса хранилища являются свойствами только объявления объекта или функции, к которой они применяются. Атрибут thread
влияет только на данные и объекты. spectre
Атрибуты naked
влияют только на функции. dllexport
Атрибуты dllimport
влияют на функции, данные и объекты. Атрибуты property
и uuid
атрибуты selectany
влияют на COM-объекты.
Для совместимости с предыдущими версиями является синонимом__declspec
, _declspec
если не указан параметр /Za
компилятора (отключить расширения языка).
Ключевое слово __declspec
должны размещаться в начале простого объявления. Компилятор игнорирует любые ключевое слово, __declspec
помещенные после * или & и перед идентификатором переменной в объявлении.
Атрибут __declspec
, указанный в начале объявления определяемого пользователем типа, применяется к переменной этого типа. Например:
__declspec(dllimport) class X {} varX;
В этом случае атрибут применяется к varX
. Атрибут__declspec
, помещенный после class
или struct
ключевое слово применяется к определяемого пользователем типа. Например:
class __declspec(dllimport) X {};
В этом случае атрибут применяется к X
.
Общие рекомендации по использованию атрибута __declspec
для простых объявлений приведены следующим образом:
decl-specifier-seq
init-declarator-list
;
Он decl-specifier-seq
должен содержать, помимо прочего, базовый тип (например, int
, , float
или typedef
имя класса), класс хранилища (например, static
или extern
__declspec
расширение). Должен init-declarator-list
содержать, помимо прочего, часть объявлений указателя. Например:
__declspec(selectany) int * pi1 = 0; //Recommended, selectany & int both part of decl-specifier
int __declspec(selectany) * pi2 = 0; //OK, selectany & int both part of decl-specifier
int * __declspec(selectany) pi3 = 0; //ERROR, selectany is not part of a declarator
В следующем примере кода объявлена целочисленная локальная переменная потока и инициализирована с использованием следующего значения:
// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;
Завершение блока, относящегося только к системам Майкрософт
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по