naked (C++)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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  

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.

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

__declspec
Palabras clave de C++
Llamadas de función naked

Mostrar: