Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Específicos do Microsoft
As seguintes regras e limitações se aplicam às funções nua:
O return declaração não é permitida.
Construções de manipulação de exceção estruturada e manipulação de exceção de C++ não são permitidas porque eles devem desenrolar entre o quadro de pilha.
Pelo mesmo motivo, qualquer forma de setjmp é proibido.
Usar o _alloca função é proibida.
Para garantir que nenhum código de inicialização de variáveis locais é exibido antes da seqüência de prólogo, inicializadas variáveis locais não são permitidas no escopo da função.Em particular, a declaração de objetos C++ não é permitida no escopo da função.No entanto, pode haver dados inicializados em um escopo aninhado.
Otimização de ponteiro do quadro (a opção de compilador /Oy) não é recomendada, mas ele é suprimido automaticamente para uma função nua.
Você não pode declarar objetos de classe do C++ no escopo léxico função.No entanto, você pode declarar objetos em um bloco aninhado.
O naked palavra-chave é ignorada durante a compilação com /clr.
Para __fastcall funções nua, sempre que houver uma referência no código C/C++ para um dos argumentos register, o código de prólogo deve armazenar os valores do registrador no local de pilha para essa variável.Por exemplo:
// nkdfastcl.cpp
// compile with: /c
// processor: x86
__declspec(naked) int __fastcall power(int i, int j) {
// calculates i^j, assumes that j >= 0
// prolog
__asm {
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
// store ECX and EDX into stack locations allocated for i and j
mov i, ecx
mov j, edx
}
{
int k = 1; // return value
while (j-- > 0)
k *= i;
__asm {
mov eax, k
};
}
// epilog
__asm {
mov esp, ebp
pop ebp
ret
}
}