__fastcall
Microsoft'a Özgü
Çağırma __fastcall
kuralı, mümkün olduğunda, işlevlere yönelik bağımsız değişkenlerin yazmaçlara geçirileceklerini belirtir. Bu çağırma kuralı yalnızca x86 mimarisi için geçerlidir. Aşağıdaki liste bu çağırma kuralının uygulamasını gösterir.
Öğe | Uygulama |
---|---|
Bağımsız değişken geçirme sırası | Bağımsız değişken listesinde soldan sağa bulunan ilk iki DWORD veya daha küçük bağımsız değişkenler ECX ve EDX yazmaçlarında geçirilir; diğer tüm bağımsız değişkenler sağdan sola yığına geçirilir. |
Yığın bakımı sorumluluğu | Çağrılan işlev, bağımsız değişkenleri yığından açar. |
Ad düzenleme kuralı | At sign (@) adlara ön eklenmiştir; at işareti ve ardından parametre listesindeki bayt sayısı (ondalık) adlara son eklenmiştir. |
Durum çevirisi kuralları | Durum çevirisi yapılmaz. |
Sınıflar, yapılar ve birleşimler | "Çok baytlı" türler (boyuttan bağımsız olarak) olarak kabul edilir ve yığına geçirilir. |
Sabit listeleri ve sabit listesi sınıfları | Temel türü yazmaç tarafından geçirildiyse yazmaç tarafından geçirilir. Örneğin, temel alınan tür int 8, 16 veya unsigned int 32 bit boyutundaysa. |
Not
Gelecekteki derleyici sürümleri, parametreleri depolamak için farklı yazmaçlar kullanabilir.
/Gr derleyici seçeneğinin kullanılması, işlev çakışan bir öznitelik kullanılarak bildirilmediği veya işlevin adı olarak bildirilmediği sürece modüldeki her işlevin olarak __fastcall
derlenmesine neden olurmain
.
__fastcall
anahtar sözcüğü, ARM ve x64 mimarilerini hedefleyen derleyiciler tarafından kabul edilir ve yoksayılır; bir x64 yongasında, kural gereği, mümkün olduğunda ilk dört bağımsız değişken yazmaçlara geçirilir ve yığına ek bağımsız değişkenler geçirilir. Daha fazla bilgi için bkz . x64 Çağrı Kuralı. ARM yongasında, yazmaçlarda en çok dört tamsayı bağımsız değişkeni ve sekiz kayan nokta bağımsız değişkeni geçirilebilir ve yığında ek bağımsız değişkenler geçirilir.
Statik olmayan sınıf işlevleri için işlev satır dışı olarak tanımlanırsa, çağrı kuralı değiştiricisinin satır dışı tanımında belirtilmesi gerekmez. Diğer bir deyişle, statik olmayan üye sınıfı yöntemler için tanım noktasında bildirim sırasında belirtilen çağırma kuralı kabul edilir. Bu sınıf tanımını ele alalım:
struct CMyClass {
void __fastcall mymethod();
};
bu:
void CMyClass::mymethod() { return; }
şuna eşdeğerdir:
void __fastcall CMyClass::mymethod() { return; }
Derleyici seçeneği /Za (Dil uzantılarını devre dışı bırak) belirtilmediği sürece, _fastcall
önceki sürümlerle uyumluluk için __fastcall
bir eş anlamlıdır.
Örnek
Aşağıdaki örnekte işlev DeleteAggrWrapper
, yazmaçlarda bağımsız değişkenler geçirilir:
// Example of the __fastcall keyword
#define FASTCALL __fastcall
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);
END Microsoft'a Özgü
Ayrıca bkz.
Bağımsız Değişkeni Geçirme ve Adlandırma Kuralları
Anahtar Sözcükler