Jar*_*Par 69
这是Microsoft特定的C++语言扩展,允许您使用存储类信息来定义类型或函数.
文档
Ale*_*ler 49
规范示例是__declspec(dllimport)和__declspec(dllexport),它指示链接器(分别)从DLL导入和导出符号.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
Run Code Online (Sandbox Code Playgroud)
(__declspec(..)只是包装了Microsoft的特定内容 - 为了实现兼容性,人们通常会用宏来包装它)
Hac*_*one 12
另一个例子来说明__declspec关键字:
在编写Windows内核驱动程序时,有时您希望使用内联汇编程序代码编写自己的prolog/epilog代码序列,因此可以使用naked属性声明函数.
__declspec( naked ) int func( formal_parameters ) {}
Run Code Online (Sandbox Code Playgroud)
要么
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Run Code Online (Sandbox Code Playgroud)
请参考naked(C++)
从本质上讲,它是Microsoft引入其C++扩展的方式,因此它们不会与标准C++的未来扩展冲突.使用__declspec,您可以归属函数或类; 具体含义取决于__declspec的性质.例如,__ declspec(裸)抑制prolog/epilog生成(对于中断处理程序,可嵌入代码等),__ declspec(thread)使变量成为本地线程,依此类推.
完整的__declspec属性列表在MSDN上可用,并且因编译器版本和平台而异.