naked (C++)
Microsoft-spezifisch
Für die Funktionen, mit dem naked-Attribut deklariert werden, generiert der Compiler Code ohne Einleitungs- und Epilogcode.Sie können diese Funktion verwenden, um zu schreiben, Einleitungs-/Epilogcode sequenzen Inlineassembler mithilfe des Codes verfügen.Nackte Funktionen sind in den Schreibvorgang virtuellen gerätetreibern hilfreich.Beachten Sie, dass das Attribut nur auf x86- naked gültig ist und ist nicht für x64 oder Itaniumverfügbar.
__declspec(naked) declarator
Hinweise
Da das naked-Attribut auf die Definition einer Funktion nur relevant sind und kein Typ modifizierer ist, müssen nackte Funktionen Syntax des erweiterten Attributs und das __declspec-Schlüsselwort verwenden.
Der Compiler kann eine Inlinefunktion für eine Funktion generieren, die 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 Nichtmitglieds Methode angewendet wird.
Beispiele
Dieser Code definiert eine Funktion mit dem naked-Attribut:
__declspec( naked ) int func( formal_parameters ) {}
Oder abwechselnd:
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Das naked-Attribut wirkt sich nur auf die Art der Codegenerierung des Compilers für die Einleitungs- und Epilog sequenzen der Funktion.Er wirkt sich nicht auf den Code, der zum Aufrufen solcher Funktionen generiert wird.Daher gilt das naked-Attribut nicht als Teil des Typs der Funktion, und Funktionszeigern können das naked-Attribut enthalten.Darüber hinaus kann das naked-Attribut keiner Datendefinition angewendet werden.Beispielsweise generiert dieses Beispiel einen Fehler:
__declspec( naked ) int i; // Error--naked attribute not
// permitted on data declarations.
Das Attribut ist nur naked zur Definition der Funktion relevant und kann nicht im Prototyp der Funktion angegeben werden.Beispielsweise generiert diese Deklaration einen Compilerfehler:
__declspec( naked ) int func(); // Error--naked attribute not
// permitted on function declarations
Microsoft ENDES bestimmten