naked (C++)

Section spécifique à Microsoft

Pour les fonctions déclarées avec l’attribut, le compilateur génère du naked code sans prolog et code épilogue. Vous pouvez utiliser cette fonctionnalité pour écrire vos propres séquences de code de prologue/épilogue à l'aide de code assembleur inline. Les fonctions naked sont particulièrement utiles pour l'écriture de pilotes de périphériques virtuels. Notez que l’attribut naked est valide uniquement sur x86 et ARM et n’est pas disponible sur x64.

Syntaxe

__declspec(naked) declarator

Notes

Étant donné que l’attribut naked est uniquement pertinent pour la définition d’une fonction et n’est pas un modificateur de type, les fonctions nues doivent utiliser la syntaxe d’attribut étendue et la __declspec mot clé.

Le compilateur ne peut pas générer une fonction inline pour une fonction marquée avec l’attribut nu, même si la fonction est également marquée avec le __forceinline mot clé.

Le compilateur émet une erreur si l’attribut naked est appliqué à quelque chose d’autre que la définition d’une méthode non membre.

Exemples

Ce code définit une fonction avec l’attribut naked :

__declspec( naked ) int func( formal_parameters ) {}

Ou, alternativement :

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

L'attribut naked affecte uniquement la nature de la génération de code du compilateur pour les séquences de prologue et d'épilogue de la fonction. Il n'affecte pas le code généré pour appeler de telles fonctions. Ainsi, l'attribut naked n'est pas considéré comme faisant partie du type de la fonction, et les pointeurs fonction ne peuvent pas avoir l'attribut naked. De plus, l'attribut naked ne peut pas être appliqué à une définition de données. Par exemple, cet exemple de code génère une erreur :

__declspec( naked ) int i;
// Error--naked attribute not permitted on data declarations.

L'attribut naked se rapporte uniquement à la définition de la fonction et ne peut pas être spécifié dans le prototype de la fonction. Par exemple, cette déclaration génère une erreur du compilateur :

__declspec( naked ) int func();  // Error--naked attribute not permitted on function declarations

FIN de la section spécifique à Microsoft

Voir aussi

__declspec
Mots clés
Appels de fonction naked