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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla