naked (C++)
Specyficzne dla firmy Microsoft
Do funkcji zadeklarowanych za pomocą atrybutu naked, kompilator generuje kod, bez kodu prologu i epilogu.Ta funkcja 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. Należy zauważyć, że atrybut naked jest prawidłowy tylko dla x86 i ARM i nie jest dostępny na x64.
__declspec(naked) declarator
Uwagi
Ponieważ atrybut naked jest istotny tylko dla definicji funkcji i nie jest modyfikatorem typu, funkcję Naked muszą użyć składni atrybutów rozszerzonych i słowa kluczowego __declspec.
Kompilator nie może wygenerować wbudowanej funkcji dla funkcji oznaczonej atrybutem Naked, nawet jeśli funkcja jest również oznaczona słowem kluczowym __forceinline.
Kompilator generuje błąd, jeśli atrybut naked jest stosowany gdzieś indziej niż definicja metody bezparametrowej.
Przykłady
Ten kod zawiera definicję funkcji z atrybutem naked:
__declspec( naked ) int func( formal_parameters ) {}
Lub inaczej:
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Atrybut naked ma wpływ na charakter generowania kodu kompilatora, dotyczący sekwencji funkcji prologu i epilogu.Nie wpływa ona na kod, który jest generowany dla 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 ten przykładowy kod generuje błąd:
__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.Na przykład deklaracja ta generuje błąd kompilatora:
__declspec( naked ) int func(); // Error--naked attribute not
// permitted on function declarations
KONIEC informacji specyficznych dla firmy Microsoft