__declspec
Только для систем Microsoft
Расширенный синтаксис атрибута для указания сведений о хранени-класса использует __declspec ключевое слово, указывающее, что экземпляр заданного типа храниться с атрибутом хранени-класса Майкрософт-специфического перечислило ниже.Примеры других модификаторов хранени-класса: static и extern ключевые слова.Однако эти ключевые слова часть спецификации ANSI языков c и C++, и поэтому не охватываемые расширенный синтаксис атрибута.Расширенный синтаксис атрибута упрощает и унифицирует расширения Майкрософт-специфического на языках c и C++.
Грамматика
рассекречивани-описатель.
__declspec ( продленн-рассекречивани-модификатор-seq )продленн-рассекречивани-модификатор-seq.
продленн-рассекречивани-модификаторOptпродленн-рассекречивани-модификатор продленн-рассекречивани-модификатор-seq
продленн-рассекречивани-модификатор.
align(#)allocate("segname")
appdomain
deprecated
dllimport
dllexport
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
process
property({get=get_func_name|,put=put_func_name})
restrict
safebuffers
selectany
thread
uuid("ComObjectGUID")
Пробел отделяет последовательность модификатора объявления.В примерах в последующих подразделах.
Грамматика расширенных атрибутов поддерживает эти атрибуты хранени-класса Майкрософт-специфического: выравнивание" выберите" Домен приложения" нерекомендуемый" dllexport" dllimport" jitintrinsic" наг" noalias" noinline" noreturn" nothrow" novtable" процесс" ограничьте" safebuffers" selectanyи Поток.Он также поддерживает эти атрибуты COM-объект. свойство и UUID.
dllexport" dllimport" naked" noalias" nothrow" property" restrict" selectany" threadи uuid атрибуты хранени-класса свойства только объявления объекта или функции к которым они применяются.thread атрибут влияет только на данные и объекты.naked атрибут влияет только на функции.dllimport и dllexport влияние атрибутов функции, данные и объекты.property" selectanyи uuid COM-объект, влияют на атрибутов.
__declspec ключевые слова должны находиться в начале простого объявления.Компилятор игнорирует без предупреждения, любые __declspec ключевые слова, налагаемые после * или & перед в объявлении переменной и идентификатора.
A __declspec атрибут, указанный в начале объявления пользовательского типа применяется к переменной типа.Примеры.
__declspec(dllimport) class X {} varX;
В этом случае атрибут применяется к varX.A __declspec помещенный выберите атрибут class OR struct ключевое слово применяется к пользовательскому типу.Примеры.
class __declspec(dllimport) X {};
В этом случае атрибут применяется к X.
Общая рекомендация для использования __declspec атрибут для простых объявлений следующим образом:
decl-specifier-seq declarator-list;
рассекречивани-описатель-seq содержит, помимо прочего, базовый тип (например.int" floata typedefили имя класса), класс хранения (например.static" extern) или __declspec расширение.init-декларатор-список содержит, помимо прочего, часть указателя объявлений.Примеры.
__declspec(selectany) int * pi1 = 0; //OK, 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;