__declspec

Microsoft'a Özgü

Depolama sınıfı bilgilerini belirtmek için genişletilmiş öznitelik söz dizimi, belirli bir tür örneğinin aşağıda listelenen Microsoft'a özgü bir depolama sınıfı özniteliğiyle depolandığını belirten anahtar sözcüğünü kullanır __declspec . Diğer depolama sınıfı değiştiricilerine örnek olarak ve extern anahtar sözcükleri verilebilirstatic. Ancak, bu anahtar sözcükler C ve C++ dillerinin ANSI belirtiminin bir parçasıdır ve bu nedenle genişletilmiş öznitelik söz dizimi kapsamında değildir. Genişletilmiş söz dizimi özniteliği Microsoft'a özel C ve C++ dilleri genişletmelerini basitleştirir ve standartlaştırır.

Dilbilgisi

decl-specifier:
__declspec ( extended-decl-modifier-seq )

extended-decl-modifier-seq:
extended-decl-modifierTercih
extended-decl-modifier extended-decl-modifier-seq

extended-decl-modifier:
align(Numarası)
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")

Beyaz boşluk, bildirim değiştirici sırasını ayırır. Örnekler sonraki bölümlerde gösterilir.

Genişletilmiş öznitelik dil bilgisi şu Microsoft'a özgü depolama sınıfı özniteliklerini destekler: , , appdomain, , deprecatedcode_seg, , dllexport, dllimport, empty_bases, , jitintrinsic, , naked, nothrownoaliassafebuffersrestrictselectanynovtableprocessspectreno_sanitize_addressnoinlinenoreturnve .threadallocatorallocatealign Ayrıca şu COM nesnesi özniteliklerini de destekler: property ve uuid.

code_seg, , dllexportdllimport, empty_bases, , naked, noalias, nothrow, no_sanitize_address, , property, selectanyrestrictthread, ve uuid depolama sınıfı öznitelikleri yalnızca uygulandıkları nesnenin veya işlevin bildiriminin özellikleridir. thread özniteliği yalnızca verileri ve nesneleri etkiler. naked ve spectre öznitelikleri yalnızca işlevleri etkiler. dllimport ve dllexport öznitelikleri işlevleri, verileri ve nesneleri etkiler. property, selectanyve uuid öznitelikleri COM nesnelerini etkiler.

Derleyici seçeneği/Za(Dil uzantılarını devre dışı bırak) belirtilmediği sürece, _declspec önceki sürümlerle uyumluluk için __declspec bir eş anlamlıdır.

__declspec Anahtar sözcükler basit bir bildirimin başına yerleştirilmelidir. Derleyici, bildirimde * veya & ve değişken tanımlayıcısının önüne yerleştirilen tüm __declspec anahtar sözcükleri uyarı vermeden yoksayar.

__declspec Kullanıcı tanımlı tür bildiriminin başında belirtilen öznitelik, bu türün değişkenine uygulanır. Örneğin:

__declspec(dllimport) class X {} varX;

Bu durumda özniteliği için varXgeçerlidir. __declspec veya struct anahtar sözcüğünden class sonra yerleştirilen öznitelik, kullanıcı tanımlı tür için geçerlidir. Örneğin:

class __declspec(dllimport) X {};

Bu durumda özniteliği için Xgeçerlidir.

Basit bildirimler için özniteliğini __declspec kullanmaya yönelik genel kılavuz aşağıdaki gibidir:

decl-specifier-seq init-declarator-list ;

decl-specifier-seq, diğer şeylerin arasında bir temel tür (örneğin, int, float, typedefveya sınıf adı), bir depolama sınıfı (örneğin, static, extern) veya __declspec uzantı içermelidir. init-declarator-list, diğer şeylerin yanı üzere bildirimlerin işaretçi kısmını içermelidir. Örneğin:

__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

Aşağıdaki kod bir tamsayı iş parçacığı yerel değişkeni bildirir ve bunu bir değer ile başlatır:

// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;

END Microsoft'a Özgü

Ayrıca bkz.

Anahtar Sözcükler
C genişletilmiş depolama sınıfı öznitelikleri