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ż
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