Udostępnij za pośrednictwem


Funkcje Naked

Specyficzne dla firmy Microsoft

Atrybut naked klasy magazynowej jest specyficznym rozszerzeniem języka C przez firmę Microsoft.Do funkcji zadeklarowanych za pomocą atrybutu naked klasy magazynowej, kompilator generuje kod, bez kodu prologu i epilogu.Ta cecha służy do pisania własnych sekwencji kodu prologu/epilogu za pomocą wbudowanego asemblera.Funkcje Naked są szczególnie przydatne w pisaniu sterowników urządzeń wirtualnych.

Ponieważ atrybut naked jest istotny tylko dla definicji funkcji i nie jest modyfikatorem typu, funkcje naked używają składni atrybutu rozszerzonego opisanej w Rozszerzonych atrybutach klasy magazynowania.

W poniższym przykładzie zdefiniowano funkcję z atrybutem naked:

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

Lub, alternatywnie:

#define Naked   __declspec( naked )

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

Atrybut naked ma wpływ tylko na charakter generowania kodu kompilatora, dotyczącego sekwencji funkcji prologu i epilogu.Nie wpływa na kod, który jest generowany do wywoływania takich funkcji.Tak więc atrybut naked nie jest uważany za część typu funkcji i wskaźniki funkcji nie mogą mieć atrybutu naked.Ponadto atrybutu naked nie można zastosować do definicji danych.Na przykład, poniższy kod generuje błędy:

__declspec( naked ) int i;  /* Error--naked attribute not */
                            /* permitted on data declarations. */

Atrybut naked ma zastosowanie tylko do definicji funkcji i nie może być określony w prototypie funkcji.Następująca deklaracja generuje błąd kompilatora:

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

KONIEC informacji specyficznych dla firmy Microsoft

Zobacz też

Informacje

Definicje funkcji języka C