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

Consulte también

__declspec
Palabras clave
Llamadas de función naked