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