naked (C++)

Seção específica da Microsoft

Para as funções declaradas com o atributo naked, o compilador gera um código sem código de prólogo e de epílogo. Você pode usar esse recurso para escrever suas próprias sequências de código de prólogo/epílogo usando o código de assembler embutido. As funções naked são particularmente úteis para escrever drivers para dispositivo virtuais. Observe que o atributo naked só é válido em x86 e ARM, e não está disponível em X64.

Sintaxe

__declspec(naked) declarator

Comentários

Como o atributo naked só é relevante para a definição de uma função e não é um modificador de tipo, as funções naked devem usar a sintaxe de atributo estendido e a palavra-chave __declspec.

O compilador não pode gerar uma função embutida para uma função marcada com o atributo naked, mesmo se a função também estiver marcada com a palavra-chave __forceinline.

O compilador emitirá um erro se o atributo naked for aplicado a qualquer elemento que não seja a definição de um método de não membro.

Exemplos

Este código define uma função com o atributo naked:

__declspec( naked ) int func( formal_parameters ) {}

Ou, alternativamente:

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

O atributo naked afeta somente a natureza de geração de código do compilador para as sequências de prólogo e epílogo da função. Não afeta o código que é gerado pela chamada dessas funções. Assim, o atributo naked não é considerado parte do tipo de função, e os ponteiros da função não podem ter o atributo naked. Além disso, o atributo naked não pode ser aplicado a uma definição de dados. Por exemplo, esta amostra de código gera um erro:

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

O atributo naked é relevante apenas à definição da função e não pode ser especificado no protótipo da função. Por exemplo, esta declaração gera um erro de compilador:

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

Fim da seção específica da Microsoft

Confira também

__declspec
Palavras-chave
Chamadas de função naked