Aracılığıyla paylaş


Kuralları ve kısıtlamaları çýplak işlevleri için

Microsoft özel

Çýplak işlevleri aşağıdaki kurallar ve sınırlamalar uygulanır:

  • return Deyimi izin verilmiyor.

  • Yığın karede açılımı gerekir çünkü yapıları yapılandırılmış özel durum işleme ve C++ özel durum işleme izin verilmez.

  • Aynı nedenle, herhangi bir biçimde setjmp yasaktır.

  • Kullanımı _alloca işlevi yasaklanıyor.

  • Yerel değişkenler için başlatma kodu yok önsöz sırası önce görünmesini sağlamak için başlatılan yerel değişkenler işlev kapsamında izin verilmez.Özellikle, C++ nesneleri bildirildikleri işlev kapsamında izin verilmez.Ancak olabilir başlatılmamış veri iç içe geçmiş bir kapsam içinde.

  • Kare işaretçisi en iyi duruma getirme (/Oy derleyici seçeneği) önerilmez, ancak çýplak işlevi için otomatik olarak bastırılır.

  • C++ sınıf nesnesi işlevi sözlü kapsamında bildirimini yapamazsınız.Ancak, iç içe geçmiş bir blok içinde nesneleri bildirebilirsiniz.

  • naked İle derlerken anahtar sözcüðünü göz ardı /clr.

  • İçin __fastcall çýplak İşlevler, c/C++ kod kayıt bağımsız değişkenlerden biri için başvuru yapıldığında önsöz kodu değerleri bu değişken için yığın konumuna yazmacın depolamanız gerekir.Örne?in:

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

Ayrıca bkz.

Başvuru

Çýplak işlev çağrıları