__declspec

Microsoft 特定的

指定儲存類別資訊的擴充屬性語法會使用 __declspec 關鍵字,指定指定類型的實例要以下列 Microsoft 特定的儲存類別屬性來儲存。 其他儲存類別修飾詞的範例包括 staticextern 關鍵字。 不過,這些關鍵字是 C 和 C++ 語言 ANSI 規格的一部分,因此不會由擴充屬性語法所涵蓋。 擴充屬性語法可簡化並標準化 Microsoft 專有的 C 和 C++ 語言擴充功能。

文法

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

extended-decl-modifier-seq:
extended-decl-modifier選擇
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-nameput-func-name | ,put= })
restrict
safebuffers
selectany
spectre(nomitigation)
thread
uuid("ComObjectGUID")

空白字元會分隔宣告修飾詞序列。 範例會在後面的章節中顯示。

擴充屬性文法支援下列 Microsoft 特定的儲存類別屬性: alignallocateappdomainallocatorcode_segdeprecatedsafebuffersdllexportnoinlinenoaliasnoreturnnakednothrowjitintrinsicnovtableno_sanitize_addressempty_basesdllimportrestrictselectanyprocessspectre 和 。 thread 它也支援下列 COM 物件屬性: propertyuuid

、、、、 empty_basesnakedselectanynoaliasthreadpropertyrestrictno_sanitize_addressnothrowuuid 儲存類別屬性只是套用物件或函式之宣告的屬性。 dllimportdllexportcode_seg 屬性 thread 只會影響資料和物件。 nakedspectre 屬性只會影響函式。 dllimportdllexport 屬性會影響函式、資料和物件。 propertyselectanyuuid 屬性會影響 COM 物件。

為了與舊版相容, _declspec 除非指定編譯器選項/Za (停用語言延伸模組) ,否則 為 同 __declspec 義字。

關鍵字 __declspec 應該放在簡單宣告的開頭。 編譯器會忽略宣告中變數識別碼後面加上 * 或 & 和 前面的任何 __declspec 關鍵字,而不發出警告。

使用者 __declspec 定義型別宣告開頭中指定的屬性會套用至該類型的變數。 例如:

__declspec(dllimport) class X {} varX;

在本案例中,屬性會套用至 varX__declspec在 或 struct 關鍵字之後 class 放置的屬性會套用至使用者定義型別。 例如:

class __declspec(dllimport) X {};

在本案例中,屬性會套用至 X

針對簡單宣告使用 屬性的 __declspec 一般指導方針如下:

decl-specifier-seq init-declarator-list ;

decl-specifier-seq在其他方面,應該包含基底類型 (例如、 int 、、 typedeffloat 、 或類別名稱) 、儲存類別 (例如、 staticextern) 或 __declspec 延伸模組。 init-declarator-list應該包含宣告的指標部分,以及其他專案。 例如:

__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

下列程式碼宣告整數執行緒區域變數,並使用值將它初始化:

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

END Microsoft 特定

另請參閱

關鍵字
C 擴充的儲存類別屬性