Share via


__declspec

Khusus Microsoft

Sintaks atribut yang diperluas untuk menentukan informasi kelas penyimpanan menggunakan __declspec kata kunci, yang menentukan bahwa instans jenis tertentu akan disimpan dengan atribut kelas penyimpanan khusus Microsoft yang tercantum di bawah ini. Contoh pengubah kelas penyimpanan lainnya termasuk kata kunci static dan extern. Namun, kata kunci ini adalah bagian dari spesifikasi ANSI dari bahasa C dan C++, dan karenanya tidak tercakup oleh sintaks atribut yang diperluas. Sintaks atribut yang diperluas menyederhanakan dan menstandarkan ekstensi khusus Microsoft ke bahasa C dan C++.

Tatabahasa

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

extended-decl-modifier-seq:
extended-decl-modifieropt
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")

Spasi putih memisahkan urutan pengubah deklarasi. Contoh muncul di bagian selanjutnya.

Tata bahasa atribut yang diperluas mendukung atribut kelas penyimpanan khusus Microsoft ini: align, , , nothrowallocatenovtablenoreturnallocatordllimportempty_basesdeprecateddllexportjitintrinsiccode_segnakedprocessnoinlineappdomainnoaliasno_sanitize_address, , restrict, safebuffers, , selectany, , spectredan .thread Ini juga mendukung atribut objek COM ini: property dan uuid.

Atribut code_segkelas penyimpanan , , dllexport, noaliasnothrowdllimportnakedempty_basesno_sanitize_address, restrictselectanyproperty, thread, , dan uuid adalah properti hanya dari deklarasi objek atau fungsi yang diterapkan. Atribut thread hanya memengaruhi data dan objek. Atribut naked dan spectre hanya memengaruhi fungsi. Atribut dllimport dan dllexport memengaruhi fungsi, data, dan objek. Atribut property, selectany, dan uuid memengaruhi objek COM.

Untuk kompatibilitas dengan versi sebelumnya, _declspec adalah sinonim kecuali __declspec opsi /Za pengompilasi (Nonaktifkan ekstensi bahasa) ditentukan.

Kata __declspec kunci harus ditempatkan di awal deklarasi sederhana. Pengkompilasi mengabaikan, tanpa peringatan, kata kunci apa pun __declspec yang ditempatkan setelah * atau & dan di depan pengidentifikasi variabel dalam deklarasi.

__declspec Atribut yang ditentukan di awal deklarasi jenis yang ditentukan pengguna berlaku untuk variabel jenis tersebut. Misalnya:

__declspec(dllimport) class X {} varX;

Dalam hal ini, atribut berlaku untuk varX. Atribut __declspec yang ditempatkan setelah class kata kunci atau struct berlaku untuk jenis yang ditentukan pengguna. Misalnya:

class __declspec(dllimport) X {};

Dalam hal ini, atribut berlaku untuk X.

Pedoman umum untuk menggunakan __declspec atribut untuk deklarasi sederhana adalah sebagai berikut:

decl-specifier-seq init-declarator-list ;

harus decl-specifier-seq berisi, antara lain, jenis dasar (misalnya, int, , float, typedefatau nama kelas), kelas penyimpanan (misalnya, static, extern), atau __declspec ekstensi. yang init-declarator-list harus berisi, antara lain, bagian pointer dari deklarasi. Misalnya:

__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

Kode berikut mendeklarasikan variabel lokal utas bilangan bulat dan menginisialisasinya dengan nilai:

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

END Khusus Microsoft

Baca juga

Kata kunci
Atribut kelas penyimpanan C yang diperluas