Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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