Aracılığıyla paylaş


/Gd, /Gr, /Gv, /Gz (Çağırma Kuralı)

Bu seçenekler, çağıran işlevin veya çağrılan işlevin çağrının sonunda bağımsız değişkenleri yığından kaldırıp kaldırmamasına ve derleyicinin tek tek işlevleri tanımlamak için kullandığı ad tasarlama kuralına bakılmaksızın, işlev bağımsız değişkenlerinin yığına gönderilme sırasını belirler.

/Gd
/Gr
/Gv
/Gz

Notlar

Varsayılan ayar olan /Gd; C++ üye işlevleri ve __stdcall, __fastcall veya __vectorcall olarak işaretli işlevler hariç tüm işlevler için __cdecl çağrı kuralı belirler.

/Gr; C++ üye işlevleri, main olarak adlandırılan işlevler ve __cdecl, __stdcall veya __vectorcall olarak işaretli işlevler hariç tüm işlevler için __fastcall çağrı kuralı belirler.Tüm __fastcall işlevleri prototiplere sahip olmalıdır.Bu çağırma kuralı yalnızca x86'yı hedefleyen derleyicilerde kullanılabilir ve diğer mimarileri hedefleyen derleyicileri tarafından göz ardı edilir.

/Gz; C++ üye işlevleri, main olarak adlandırılan işlevler ve __cdecl, __fastcall veya __vectorcall olarak işaretli işlevler hariç tüm işlevler için __stdcall çağrı kuralı belirler.Tüm __stdcall işlevleri prototiplere sahip olmalıdır.Bu çağırma kuralı yalnızca x86'yı hedefleyen derleyicilerde kullanılabilir ve diğer mimarileri hedefleyen derleyicileri tarafından göz ardı edilir.

/Gv; C++ üye işlevleri, main olarak adlandırılan işlevler, vararg bağımsız değişken listesi içeren işlevler veya çakışan bir __cdecl, __stdcall, veya __fastcall özniteliği ile işaretlenen işlevler hariç tüm işlevler için __vectorcall çağrı kuralı belirler.Bu çağırma kuralı yalnızca /arch:SSE2 ve üstünü destekleyen x86 ve x64 mimarilerinde kullanılabilir ve ARM mimarisini hedefleyen derleyiciler tarafından göz ardı edilir.

Bir değişken bağımsız değişken sayısı alan işlevler __cdecl olarak işaretlenmelidir.

/Gd, /Gr, /Gv ve /Gz/clr:safe veya /clr:pure ile uyumlu değildir.

[!NOT]

x86 işlemcileri için varsayılan olarak C++ üye işlevleri __thiscall kullanır.

Tüm işlemciler için, açıkça __cdecl, __fastcall, __vectorcall ya da __stdcall olarak işaretlenen bir üye işlev, o mimaride yok sayılmıyorsa belirli çağrı kuralını kullanır.Her zaman __cdecl çağrı kuralını kullanan bağımsız değişkenlerin değişken sayısını alan üye işlevi.

Bu derleyici seçeneklerinin, C++ yöntemleri ve işlevlerinin ad düzenlemesi üzerine hiçbir etkisi yoktur.extern "C" olarak açıklanmadığı sürece, C++ yöntemleri ve işlevleri farklı bir ad dekorasyon düzeni kullanır.Daha fazla bilgi için bkz. Düzenlenmiş Adlar.

Çağırma kuralları hakkında daha fazla bilgi için bkz. Çağırma Kuralları.

__cdecl Özellikleri

x86 işlemcilerde, tüm işlev bağımsız değişkenleri yığında sağdan sola geçirilir.ARM ve x64 mimarilerinde, bazı bağımsız değişkenler kayıt tarafından geçirilir ve geri kalanlar yığın üzerinde sağdan sola geçirilir.Çağıran yordam, yığından bağımsız değişkenleri açar.

C'de, __cdecl adlandırma kuralı, işlev adını, öncesinde bir alt çizgi (_) ile kullanır; büyük/küçük harf çevirisi gerçekleşmez.extern "C" olarak açıklanmadığı sürece, C++ işlevleri farklı bir ad dekorasyon düzeni kullanır.Daha fazla bilgi için bkz. Düzenlenmiş Adlar.

__fastcall Özellikleri

Bir __fastcall işlevinin bağımsız değişkenlerinden bazıları yazmaçlara geçirilir (x86 işlemciler, ECX ve EDX), ve geri kalan yığın üstüne sağdan sola itilir.Çağırılan rutin, dönmeden önce yığından bu bağımsız değişkenleri açar.Genellikle, /Gr yürütme süresini azaltır.

[!NOT]

Satır içi derleme dilinde yazılı işlev için __fastcall çağırma kuralını kullanırken dikkatli olun.Yazmaçların kullanımı derleyicinin kullanımıyla çakışabilir.

C'de,__fastcall adlandırma kuralı, işlev adını önünde bir et işareti (@) ve ardında işlev bağımsız değişkenlerinin bayt cinsinden boyutu ile kullanır.Tamamlanan durum çevirisi yok.Derleyici adlandırma kuralı için bu şablonu kullanır:

@function_name@number

__fastcall adlandırma kuralını kullanırken, standart içerik dosyalarını kullanın.Aksi takdirde, çözülmemiş dış başvurular alırsınız.

__stdcall Özellikleri

__stdcall işlevinin bağımsız değişkenleri sağdan sola yığın üzerine itilir ve çağrılan işlev döndürülmeden önce yığından bu değişkenleri açar.

C'de,__stdcall adlandırma kuralı, işlev adını önünde bir alt çizgi (_) ve ardında bir et (@) işareti ve işlev bağımsız değişkenlerinin bayt cinsinden boyutu ile kullanır.Gerçekleşen durum çevirisi yok.Derleyici adlandırma kuralı için bu şablonu kullanır:

_functionname@number

__vectorcall Özellikleri

__vectorcall işlevinin tamsayı değişkenleri, en fazla iki (x86) veya dört (x64) tamsayı kaydı ve kayan nokta ve vektör değerleri için en fazla altı XMM kaydı kullanılarak değerle geçirilir ve kalanlar ise yığında sağdan sola geçirilir.Çağrılan işlev, dönmeden önce yığını temizler.XMM0'vektör ve kayan nokta dönüş değerleri döndürülür.

C'de,__vectorcall adlandırma kuralı, işlev adını ardında iki et işareti (@@) işlev bağımsız değişkenlerinin bayt cinsinden boyutu ile kullanır.Gerçekleşen durum çevirisi yok.Derleyici adlandırma kuralı için bu şablonu kullanır:

functionname@@number

Ayrıca bkz.

Başvuru

Derleyici Seçenekleri

Derleyici Seçeneklerini Ayarlama