Funkcje Naked

Specyficzne dla firmy Microsoft

Atrybut naked klasy magazynu jest rozszerzeniem specyficznym dla firmy Microsoft dla języka C. W przypadku funkcji zadeklarowanych za pomocą atrybutu naked klasy magazynu kompilator generuje kod bez prologu i kodu epilogu. Za pomocą tej funkcji można pisać własne sekwencje kodu prologu/epilogu przy użyciu wbudowanego kodu asemblera. Funkcje Naked są szczególnie przydatne podczas pisania sterowników urządzeń wirtualnych.

naked Ponieważ atrybut ma zastosowanie tylko do definicji funkcji i nie jest modyfikatorem typu, funkcje naked używają rozszerzonej składni atrybutu opisanej w extended Storage-Class Attributes.

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

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

Alternatywnie:

#define Naked   __declspec( naked )

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

Atrybut naked ma wpływ tylko na charakter generowania kodu kompilatora dla sekwencji prologu i epilogu funkcji. Nie ma to wpływu na kod generowany do wywoływania takich funkcji. naked W związku z tym atrybut nie jest uważany za część typu funkcji, a wskaźniki funkcji nie mogą mieć atrybutu naked . Ponadto nie można zastosować atrybutu naked do definicji danych. Na przykład następujący 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żna go określić w prototypie funkcji. Następująca deklaracja generuje błąd kompilatora:

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

KONIEC specyficzny dla firmy Microsoft

Zobacz też

Definicje funkcji języka C