__declspec
Programu Microsoft
Składnię atrybutów rozszerzonych, służącą do wykorzystania informacji klasy magazynowania __declspec słowa kluczowego, które określa, że wystąpienie danego typu mają być przechowywane z atrybutem klasy magazynowania specyficzne dla firmy Microsoft wymienionych poniżej.Przykłady innych modyfikatorów klasy magazynowania static i extern słowa kluczowe.Jednakże te słowa kluczowe są częścią specyfikacji ANSI języków c i C++ i jako takie nie są objęte przez składnię atrybutu rozszerzonego.Składnia atrybutu rozszerzonego upraszcza i standaryzuje rozszerzenia firmy Microsoft do języków c i C++.
Gramatyka
Specyfikator Decl:
__declspec ( rozszerzone decl modyfikator seq)rozszerzone decl modyfikator seq:
rozszerzone decl modyfikatoroptrozszerzone decl modyfikator rozszerzone decl modyfikator seq
rozszerzone decl modyfikator:
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")
Białe miejsca oddziela sekwencji modyfikator deklaracji.Przykłady są wyświetlane w kolejnych rozdziałach.
Gramatyka rozszerzonych atrybutów obsługuje te atrybuty klasy magazynowania specyficzne dla firmy Microsoft: wyrównać, przydzielić, elementu appdomain, przestarzałe, dllexport, dllimport, jitintrinsic, owies, noalias, noinline, noreturn, nothrow, novtable, proces, ograniczyć, safebuffers, selectany, i wątku.Obsługuje ona również te atrybuty obiektu COM: Właściwość i uuid.
dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, I uuid atrybuty klasy magazynowania są właściwości obiektu lub funkcji, które są stosowane tylko zgłoszenia.thread Atrybut wpływa na dane i obiekty tylko.naked Atrybut ma wpływ tylko funkcje.dllimport i dllexport atrybuty wpływa na funkcje, dane i obiekty.property, selectany, I uuid atrybuty wpływają na obiekty COM.
__declspec Słowa kluczowe, należy umieścić na początku prostych deklaracji.Kompilator ignoruje bez wyświetlania ostrzeżenia, w każdym __declspec słowa kluczowe umieszczone po * lub & i przed identyfikatorem zmiennej w deklaracji.
A __declspec atrybutu na początku deklaracji typu zdefiniowanego przez użytkownika stosuje się do zmiennych tego typu.Na przykład:
__declspec(dllimport) class X {} varX;
W tym przypadku atrybut stosuje się do varX.A __declspec atrybut umieszczone po class lub struct słowa kluczowego, które stosuje się do typu zdefiniowanego przez użytkownika.Na przykład:
class __declspec(dllimport) X {};
W tym przypadku atrybut stosuje się do X.
Ogólne wytyczne dotyczące korzystania z __declspec atrybut dla prostych deklaracji jest w następujący sposób:
decl-specifier-seq declarator-list;
Decl specyfikatora seq powinien zawierać, między innymi, typ podstawowy (np.intfloat, typedef, lub nazwa klasy), Magazyn klasy (np.static, extern), or the __declspec extension.Init; niewłaściwy deklarator listy powinien zawierać, między innymi, części wskaźnik deklaracji.Na przykład:
__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
Poniższy kod deklaruje zmiennej lokalnej wątku do liczby całkowitej i inicjuje ją z wartością:
// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;