Aracılığıyla paylaş


Naked İşlevleri için Kurallar ve Sınırlamalar

Microsoft'a Özgü

Çıplak işlevler için aşağıdaki kurallar ve sınırlamalar geçerlidir:

  • Deyimine return izin verilmiyor.

  • Yapılandırılmış Özel Durum İşleme ve C++ Özel Durum İşleme yapılarına izin verilmez çünkü yığın çerçevesi boyunca geri sarmaları gerekir.

  • Aynı nedenle, her türlü setjmp yasaktır.

  • işlevinin _alloca kullanılması yasaktır.

  • Giriş sırası öncesinde yerel değişkenler için başlatma kodu görünmediğinden emin olmak için, başlatılan yerel değişkenlere işlev kapsamında izin verilmez. Özellikle, işlev kapsamında C++ nesnelerinin bildirimine izin verilmez. Bununla birlikte, iç içe yerleştirilmiş bir kapsamda başlatılan veriler olabilir.

  • Çerçeve işaretçisi iyileştirmesi (/Oy derleyici seçeneği) önerilmez, ancak çıplak bir işlev için otomatik olarak bastırılır.

  • İşlev sözcük temelli kapsamında C++ sınıf nesneleri bildiremezsiniz. Bununla birlikte, iç içe bloktaki nesneleri bildirebilirsiniz.

  • naked/clr ile derlenirken anahtar sözcüğü yoksayılır.

  • __fastcall çıplak işlevler için, C/C++ kodunda yazmaç bağımsız değişkenlerinden birine başvuru olduğunda, prolog kodu bu yazmaç değerlerini bu değişkenin yığın konumuna depolamalıdır. Örnek:

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

END Microsoft'a Özgü

Ayrıca bkz.

Naked İşlevi Çağrıları