naked (C++)
Específicos de Microsoft
Para las funciones declaradas con el atributo naked
, el compilador genera código sin prólogo ni epílogo. Puede utilizar esta característica para escribir sus propias secuencias de código de prólogo/epílogo mediante código del ensamblador alineado. Las funciones naked son especialmente útiles al escribir controladores de dispositivos virtuales. Tenga en cuenta que el atributo naked
solo es válido en x86 y ARM, y no está disponible en x64.
Sintaxis
__declspec(naked) declarator
Comentarios
Dado que el atributo naked
solo es relevante para la definición de una función y no es un modificador de tipo, las funciones naked deben utilizar la sintaxis de atributos extendida y la palabra clave __declspec.
El compilador no puede generar una función inline para una función marcada con el atributo naked, incluso si la función también está marcada con la palabra clave __forceinline.
El compilador emite un error si el atributo naked
se aplica a cualquier cosa que no sea la definición de un método no miembro.
Ejemplos
Este código define una función con el atributo naked
:
__declspec( naked ) int func( formal_parameters ) {}
O bien, como alternativa:
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
El atributo naked
solo afecta a la naturaleza de la generación de código del compilador para las secuencias de prólogo y epílogo de la función. No afecta al código que se genera para llamar a esas funciones. Por tanto, el atributo naked
no se considera parte del tipo de la función y los punteros a función no pueden tener el atributo naked
. Además, el atributo naked
no se puede aplicar a una definición de datos. Por ejemplo, en este ejemplo de código se genera un error:
__declspec( naked ) int i;
// Error--naked attribute not permitted on data declarations.
El atributo naked
solo es pertinente para la definición de la función y no se puede especificar en el prototipo de la función. Por ejemplo, esta declaración genera un error del compilador:
__declspec( naked ) int func(); // Error--naked attribute not permitted on function declarations
FIN de Específicos de Microsoft