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. */ \
END Microsoft-spezifisch