naked (C++)
Específico 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.
__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 de Específico da Microsoft