什么是__declspec,我什么时候需要使用它?

我在我正在阅读的代码中看到__declspec的实例。 它是什么? 什么时候我需要使用这个构造?

这是C ++语言的一个Microsoft特定的扩展,它允许您将types或函数与存储类信息相关联。

文档

__declspec(C ++)

规范示例是__declspec(dllimport)__declspec(dllexport) ,它指示链接程序从DLL导入或导出(分别)符号。

 // header __declspec(dllimport) void foo(); // code - this calls foo() somewhere in a DLL foo(); 

__declspec(..)只是包装微软的具体东西 – 为了达到兼容性,通常会用macros来包装它)

它主要用于将符号导出/导出到共享库(DLL)。 Visual C ++和GCC编译器都支持__declspec(dllimport)__declspec(dllexport) 。 其他用途(某些微软)logging在MSDN中 。

再举一个例子来说明__declspec关键字:

在编写Windows内核驱动程序时,有时需要使用内联汇编程序代码编写自己的序言/ epilog代码序列,因此可以使用naked属性声明函数。

 __declspec( naked ) int func( formal_parameters ) {} 

要么

 #define Naked __declspec( naked ) Naked int func( formal_parameters ) {} 

请参考裸(C ++)

从本质上讲,这是微软推出C ++扩展的方式,以便它们不会与将来的标准C ++扩展冲突。 使用__declspec,你可以对一个函数或类进行赋值; 确切的含义取决于__declspec的性质。 例如,__declspec(裸体)会抑制prolog / epilog的生成(对于中断处理程序,可embedded的代码等),__declspec(thread)将variables设置为线程本地等等。

__declspec属性的完整列表在MSDN上可用,并且因编译器版本和平台而异。