Aracılığıyla paylaş


__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.

Dekont

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