naked (C++)

Specyficzne dla firmy Microsoft

W przypadku funkcji zadeklarowanych za pomocą atrybutu naked kompilator generuje kod bez prologu i kodu epilogu. Tej funkcji można użyć do pisania własnych sekwencji kodu prolog/epilog przy użyciu wbudowanego kodu asemblera. Funkcje Naked są szczególnie przydatne podczas pisania sterowników urządzeń wirtualnych. Należy pamiętać, że naked atrybut jest prawidłowy tylko w architekturze x86 i ARM i nie jest dostępny w wersji x64.

Składnia

__declspec(naked) declarator

Uwagi

naked Ponieważ atrybut ma zastosowanie tylko do definicji funkcji i nie jest modyfikatorem typu, funkcje naked muszą używać rozszerzonej składni atrybutu i słowa kluczowego __declspec.

Kompilator nie może wygenerować funkcji wbudowanej dla funkcji oznaczonej atrybutem naked, nawet jeśli funkcja jest również oznaczona za pomocą słowa kluczowego __forceinline .

Kompilator zgłasza błąd, jeśli naked atrybut jest stosowany do niczego innego niż definicja metody innej niż metoda nieczłonkowa.

Przykłady

Ten kod definiuje funkcję z atrybutem naked :

__declspec( naked ) int func( formal_parameters ) {}

Alternatywnie:

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

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ć atrybutunaked. Ponadto nie można zastosować atrybutu naked 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żna go określić w prototypie funkcji. Na przykład ta deklaracja generuje błąd kompilatora:

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

END Microsoft Specific

Zobacz też

__declspec
Słowa kluczowe
Wywołania funkcji Naked