__declspec

Microsoft 专用

指定的存储类的信息扩展属性语法使用 __declspec 关键字,指定特定类型的实例将存储在下面列出的某个 Microsoft 存储特定类的属性。 其他存储类修饰符的示例包括 static 和 extern 关键字。 但是,这些关键字是 C 和 C++ 语言的 ANSI 规范的一部分,并且,,因为这样不受扩展特性语法中。 扩展属性语法简化和标准化特定于 Microsoft 的扩展到 C 和 C++ 语言。

语法

  • 非阶级化说明符:
    __declspec (扩展非阶级化修饰符顺序 )

  • 扩展非阶级化修饰符顺序:
    扩展非阶级化修饰符opt

    扩展非阶级化修饰符序列的扩展非阶级化修饰符

  • 扩展非阶级化修饰符:
    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")

空格分隔声明修饰符序列。 示例显示在新部分。

扩展属性语法支持这些特定于 Microsoft 的存储类的属性: 对齐分配appdomain已弃用dllexportdllimportjitintrinsicnoaliasnoinlinenoreturnnothrownovtable处理限制safebuffersselectany线程。 它还支持这些 COM 对象属性: 属性uuid

dllexport、 dllimport、 naked、 noalias、 nothrow、 property、 restrict、 selectany、 thread和 uuid 存储类的属性只属性它们应用于的对象或函数的说明。 thread 属性仅影响数据和对象。 naked 属性仅影响功能。 dllimport 和 dllexport 属性影响函数、数据和对象。 property、 selectany和 uuid 属性影响 COM 对象。

应在一个简单的声明开始放置 __declspec 关键字。 编译器忽略,因此,不出现警告,在声明的变量的标识符以前后放置在 * 或 以及任何 __declspec 关键字。

__declspec 属性指定用户定义的类型声明的开头适用于该类型的变量。 例如:

__declspec(dllimport) class X {} varX;

在本例中,特性应用于 varX。 在 class 或 struct 关键字后面放置的 __declspec 特性应用于用户定义的类型。 例如:

class __declspec(dllimport) X {};

在本例中,特性应用于 X。

原则为使用 __declspec 属性简单的声明如下所示:

decl-specifier-seq declarator-list;

非阶级化说明符顺序 应包含,此外,基础类型 (即。 int、 float、 typedef或类名),存储类 (即。 static、 extern),或者 __declspec 扩展。 init 公告列表 应包含,此外,声明的指针部件。 例如:

__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

下面的代码声明一个整数线程局部变量并将它初始化的值:

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

请参见

参考

C++关键字

C扩展的存储类的属性