Teilen über


Naked-Funktionen

Microsoft-spezifisch

Das naked-Speicherklassenattribut ist eine Microsoft-spezifische Erweiterung der Programmiersprache C. Der Compiler generiert Code ohne Prolog- und Epilogcode für Funktionen, die mit dem naked-Speicherklassenattribut deklariert werden. 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.

Da das naked-Attribut nur für die Definition einer Funktion relevant ist und kein Typmodifizierer ist, müssen naked-Funktionen die erweiterte Attributsyntax verwenden, die in Erweiterte Speicherklassenattribute beschrieben wird.

Das folgende Beispiel definiert eine Funktion mit dem naked-Attribut:

__declspec( naked ) int func( formal_parameters )
{
   /* Function body */
}

Oder auch:

#define Naked   __declspec( naked )

Naked int func( formal_parameters )
{
   /* Function body */
}

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. Durch folgenden Code werden z. B. Fehler verursacht:

__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. In der folgenden Deklaration wird ein Compilerfehler generiert:

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

Ende Microsoft-spezifisch

Siehe auch

C-Funktionsdefinitionen