Sdílet prostřednictvím


Pravidla a omezení pro holé funkce

Konkrétní společnosti Microsoft

Holé funkcí platí následující pravidla a omezení:

  • return Příkaz není povoleno.

  • Strukturované zpracování výjimek a zpracování výjimek C++ konstrukce není povoleno, protože se musí unwind přes snímek zásobníku.

  • Ze stejného důvodu jakékoli formy setjmp je zakázáno.

  • Použít _alloca funkce je zakázáno.

  • Chcete-li zajistit, že žádný inicializační kód pro lokální proměnné se zobrazí před sekvence prolog, inicializovat místní proměnné není povoleno úrovni funkce.Prohlášení objektů C++, není povoleno úrovni funkce.Vnořené oboru může být však inicializovat data.

  • Ukazatel Optimalizace snímků (volba kompilátoru /Oy) se nedoporučuje, ale je automaticky potlačeny holé funkce.

  • Nelze deklarovat třídu objektů C++ na lexikální rozsah funkce.Můžete však deklarovat objekty vnořené bloku.

  • naked Klíčové slovo ignorováno při kompilaci s /clr.

  • Pro __fastcall holé funkce, kdykoli existuje odkaz v kódu C/C++ pro jeden z argumentů rejstříku, prolog kódu by měla být uložena hodnoty registru do umístění zásobníku pro tuto proměnnou.Příklad:

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

Viz také

Referenční dokumentace

Holé volání funkce