ejemplos descargar definicion compiler caracteristicas c++

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

__declspec (C ++)


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)