naked (C++)
Microsoft-spezifisch
Für die Funktionen, die mit dem naked-Attribut deklariert werden, generiert der Compiler Code ohne Prolog- und Epilogcode. Sie können diese Funktion verwenden, um eigene Prolog-/Epilogcodesequenzen mithilfe von Inlineassemblercode zu schreiben. Naked-Funktionen sind vor allem beim Schreiben von virtuellen Gerätetreibern hilfreich. Beachten Sie, dass das naked-Attribut nur für x86 und ARM gültig und nicht für x64 verfügbar ist.
__declspec(naked) declarator
Hinweise
Da das naked-Attribut nur für die Definition einer Funktion relevant ist und kein Typmodifizierer ist, müssen naked-Funktionen eine erweiterte Attributsyntax und das __declspec-Schlüsselwort verwenden.
Der Compiler kann keine Inlinefunktion für eine Funktion generieren, die mit dem naked-Attribut gekennzeichnet ist, selbst wenn die Funktion auch mit dem __forceinline-Schlüsselwort gekennzeichnet ist.
Der Compiler gibt einen Fehler aus, wenn das naked-Attribut auf einen anderen Wert als die Definition einer Nichtmembermethode angewendet wird.
Beispiele
Dieser Code definiert eine Funktion mit dem naked-Attribut:
__declspec( naked ) int func( formal_parameters ) {}
Oder auch:
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Das naked-Attribut wirkt sich nur auf die Codegenerierung des Compilers für die Prolog- und Epilogsequenzen der Funktion aus. Es hat keine Auswirkungen auf den Code, der zum Aufrufen solcher Funktionen generiert wird. Daher gilt das naked-Attribut nicht als Teil des Typs der Funktion, und Funktionszeiger dürfen nicht das naked-Attribut enthalten. Darüber hinaus kann das naked-Attribut nicht auf eine Datendefinition angewendet werden. Beispielsweise wird mit diesem Codebeispiel ein Fehler generiert:
__declspec( naked ) int i; // Error--naked attribute not
// permitted on data declarations.
Das naked-Attribut ist nur für die Funktionsdefinition relevant und kann nicht im Funktionsprototyp angegeben werden. Beispielsweise wird mit dieser Deklaration ein Compilerfehler generiert:
__declspec( naked ) int func(); // Error--naked attribute not
// permitted on function declarations
END Microsoft-spezifisch