descargar - c++ manual
¿Qué es__declspec y cuándo debo usarlo? (5)
He visto instancias de __declspec en el código que estoy leyendo. ¿Qué es? ¿Y cuándo necesitaría usar esta construcción?
Básicamente, es la forma en que Microsoft presenta sus extensiones C ++ para que no entren en conflicto con futuras extensiones de C ++ estándar. Con __declspec, puede atribuir una función o clase; el significado exacto varía según la naturaleza de __declspec. __declspec (desnudo), por ejemplo, suprime la generación de prólogo / epilog (para controladores de interrupción, código incrustable, etc.), __declspec (thread) hace una variable thread-local, y así sucesivamente.
La lista completa de los atributos __declspec está disponible en MSDN y varía según la versión del compilador y la plataforma.
Esta es una extensión específica de Microsoft para el lenguaje C ++ que le permite atribuir un tipo o función con información de la clase de almacenamiento.
Documentación
Otro ejemplo para ilustrar la palabra clave __declspec :
Cuando escribe un controlador de kernel de Windows, a veces desea escribir sus propias secuencias de código de prólogo / epílogo usando el código ensamblador en línea , para que pueda declarar su función con el atributo desnudo .
__declspec( naked ) int func( formal_parameters ) {}
O
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Por favor, consulte desnudo (C ++)
Se utiliza principalmente para importar símbolos de / exportar símbolos a una biblioteca compartida (DLL). Los compiladores de Visual C ++ y GCC admiten __declspec(dllimport)
y __declspec(dllexport)
. Otros usos (algunos solo de Microsoft) están documentados en MSDN .
Los ejemplos canónicos son __declspec(dllimport)
y __declspec(dllexport)
, que le indican al vinculador que importe y exporte (respectivamente) un símbolo desde o hacia un archivo DLL.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
( __declspec(..)
simplemente termina con las cosas específicas de Microsoft: para lograr la compatibilidad, normalmente se eliminaría con macros)