Freigeben über


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

Siehe auch

Referenz

__declspec

C++-Schlüsselwörter

Naked-Funktionsaufrufe