Share via


naked (C++)

Específicos de Microsoft

Para las funciones declaradas con el atributo naked, el compilador genera código sin código de prólogo y 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.

__declspec(naked) declarator

Comentarios

Puesto que el atributo naked solo es pertinente para la definición de una función y no es un modificador de tipo, las funciones naked deben utilizar la sintaxis de atributo extendido y la palabra clave __declspec.

El compilador no puede generar una función insertada para una función marcada con el atributo naked, incluso aunque la función esté marcada también con la palabra clave __forceinline.

El compilador emite un error si el atributo naked se aplica a algo distinto de la definición de un método que no es miembro.

Ejemplos

En este código se 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

Específicos de Microsoft: END

Vea también

Referencia

__declspec

Palabras clave de C++

Llamadas de función naked