naked (C++)

Sezione specifica Microsoft

Per le funzioni dichiarate con l'attributo naked , il compilatore genera codice senza codice prologo ed epilogo. È possibile utilizzare questa funzionalità per scrivere le proprie sequenze di codice di epilogo o di prologo utilizzando codice assembler inline. Le funzioni con attributo naked sono particolarmente utili nella scrittura di driver di dispositivi virtuali. Si noti che l'attributo naked è valido solo in x86 e ARM e non è disponibile in x64.

Sintassi

__declspec(naked) declarator

Osservazioni:

Poiché l'attributo naked è rilevante solo per la definizione di una funzione e non è un modificatore di tipo, le funzioni naked devono usare la sintassi degli attributi estesi e la parola chiave __declspec .

Il compilatore non può generare una funzione inline per una funzione contrassegnata con l'attributo naked, anche se la funzione è contrassegnata anche con la parola chiave __forceinline .

Il compilatore genera un errore se l'attributo naked viene applicato a qualsiasi elemento diverso dalla definizione di un metodo non membro.

Esempi

Questo codice definisce una funzione con l'attributo naked :

__declspec( naked ) int func( formal_parameters ) {}

In alternativa, in alternativa:

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

L'attributo naked influisce solo sulla natura della generazione di codice del compilatore per le sequenze di prologo ed epilogo della funzione. Tale attributo non influisce sul codice generato per chiamare tali funzioni. Di conseguenza, l'attributo naked non è considerato come parte del tipo di funzione e i puntatori alla funzione non possono avere l'attributo naked. Inoltre, l'attributo naked non può essere applicato a una definizione dei dati. Ad esempio, questo esempio di codice genera un errore:

__declspec( naked ) int i;
// Error--naked attribute not permitted on data declarations.

L'attributo naked è rilevante solo per la definizione della funzione e non può essere specificato nel prototipo della funzione. Ad esempio, questa dichiarazione genera un errore del compilatore:

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

Fine sezione specifica Microsoft

Vedi anche

__declspec
Parole chiave
Chiamate di funzioni naked