naked (C++)

Microsoft-spezifisch

Für Funktionen, die mit dem naked Attribut deklariert wurden, 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 ist und auf x64 nicht verfügbar ist.

Syntax

__declspec(naked) declarator

Hinweise

Da das naked Attribut nur für die Definition einer Funktion relevant ist und kein Typmodifizierer ist, müssen nackte Funktionen erweiterte Attributsyntax und die __declspec Schlüsselwort (keyword) verwenden.

Der Compiler kann keine Inlinefunktion für eine Funktion generieren, die mit dem nackten Attribut gekennzeichnet ist, auch wenn die Funktion auch mit dem __forceinline Schlüsselwort (keyword) gekennzeichnet ist.

Der Compiler gibt einen Fehler aus, wenn das naked Attribut auf einen anderen Wert als die Definition einer Nicht-Member-Methode 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

Ende Microsoft-spezifisch

Siehe auch

__declspec
Schlüsselwörter
Naked-Funktionsaufrufe