__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-modifier
Tercih
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
, , deprecated
code_seg
, , dllexport
, dllimport
, empty_bases
, , jitintrinsic
, , naked
, nothrow
noalias
safebuffers
restrict
selectany
novtable
process
spectre
no_sanitize_address
noinline
noreturn
ve .thread
allocator
allocate
align
Ayrıca şu COM nesnesi özniteliklerini de destekler: property
ve uuid
.
code_seg
, , dllexport
dllimport
, empty_bases
, , naked
, noalias
, nothrow
, no_sanitize_address
, , property
, selectany
restrict
thread
, 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
, selectany
ve 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 varX
geç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 X
geç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
, typedef
veya 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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin