naked (C++)
Específicos de Microsoft
Para las funciones declaradas con el atributo de naked , el compilador genera código sin código de prólogo y de epílogo.Puede utilizar esta característica para escribir dispone de secuencias de código de prólogo/epilog mediante código ensamblador en línea.Las funciones descubiertas son especialmente útiles en controladores de dispositivo virtual de escritura.Observe que el atributo de naked sólo es válido en x86, y no está disponible en x64 o Itanium.
__declspec(naked) declarator
Comentarios
Dado que el atributo de naked solo es pertinente a la definición de una función y no es un modificador de tipo, las funciones descubiertas deben utilizar la sintaxis de atributo extendido y la palabra clave de __declspec .
El compilador no puede generar una función inline para una función marcada con el atributo naked, aunque la función también se marca con la palabra clave de __forceinline .
El compilador emite un error si el atributo de naked se aplica algo distinto de la definición de un método que no es miembro.
Ejemplos
este código define una función con el atributo de naked :
__declspec( naked ) int func( formal_parameters ) {}
o, como alternativa:
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
El atributo de naked afecta sólo a la naturaleza de la generación de código del compilador para las secuencias de prólogo y de epílogo de la función.No afecta al código que se genera para llamar a estas funciones.Así, el atributo de naked no se considera parte del tipo de función, y los punteros a función no pueden tener el atributo de naked .además, el atributo de naked no se puede aplicar a una definición de datos.por ejemplo, este ejemplo de código genera un error:
__declspec( naked ) int i; // Error--naked attribute not
// permitted on data declarations.
El atributo de naked sólo es relevante a la definición de la función y no se puede especificar en el prototipo de función.Por ejemplo, esta declaración genera un error del compilador:
__declspec( naked ) int func(); // Error--naked attribute not
// permitted on function declarations
Específico de Microsoft de FINAL