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