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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin