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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de