Regras e limitações para funções nua

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
   }
}

Consulte também

Referência

Chamadas de função nua