/Gd, /Gr, /Gv, /Gz (Çağırma Kuralı)
Bu seçenekler işlev bağımsız değişkenlerinin yığına gönderilme sırasını, çağıran işlevinin veya çağrılan işlevin çağrının sonundaki bağımsız değişkenleri yığından kaldırıp kaldırmadığını ve derleyicinin tek tek işlevleri tanımlamak için kullandığı ad dekorasyon kuralını belirler.
Sözdizimi
/Gd
/Gr
/Gv
/Gz
Açıklamalar
/Gd
varsayılan ayarı, __stdcall, __fastcall veya __vectorcall olarak işaretlenmiş C++ üye işlevleri ve işlevleri dışındaki tüm işlevler için __cdecl çağırma kuralını belirtir.
/Gr
__fastcall
C++ üye işlevleri, adlı main
işlevler ve , veya __vectorcall
olarak işaretlenmiş __cdecl
__stdcall
işlevler dışındaki tüm işlevler için çağırma kuralını belirtir. Tüm __fastcall
işlevlerin prototipleri olmalıdır. Bu çağırma kuralı yalnızca x86'yı hedefleyen derleyicilerde kullanılabilir ve diğer mimarileri hedefleyen derleyiciler tarafından yoksayılır.
/Gz
__stdcall
C++ üye işlevleri, adlı main
işlevler ve , veya __vectorcall
olarak işaretlenmiş __cdecl
__fastcall
işlevler dışındaki tüm işlevler için çağırma kuralını belirtir. Tüm __stdcall
işlevlerin prototipleri olmalıdır. Bu çağırma kuralı yalnızca x86'yı hedefleyen derleyicilerde kullanılabilir ve diğer mimarileri hedefleyen derleyiciler tarafından yoksayılır.
/Gv
__vectorcall
C++ üye işlevleri, adlı main
işlevler, değişken bağımsız değişken listesi olan vararg
işlevler veya çakışan __cdecl
bir , __stdcall
veya __fastcall
özniteliğiyle işaretlenmiş işlevler dışındaki tüm işlevler için çağırma kuralını belirtir. Bu çağırma kuralı yalnızca /arch:SSE2 ve üzerini destekleyen x86 ve x64 mimarilerinde kullanılabilir ve ARM mimarisini hedefleyen derleyiciler tarafından yoksayılır.
Değişken sayıda bağımsız değişken kullanan işlevler olarak işaretlenmelidir __cdecl
.
/Gd
, /Gr
/Gv
ve /Gz
veya /clr:pure ile /clr:safe
uyumlu değildir. /clr:pure ve /clr:safe derleyici seçenekleri Visual Studio 2015'te kullanım dışıdır ve Visual Studio 2017 ve sonraki sürümlerde desteklenmez.
Not
X86 işlemciler için varsayılan olarak C++ üye işlevleri kullanır __thiscall
.
Tüm işlemciler için, açıkça , __fastcall
, __vectorcall
olarak __cdecl
işaretlenmiş bir üye işlevi veya __stdcall
bu mimaride yoksayılmazsa belirtilen çağrı kuralını kullanır. Değişken sayıda bağımsız değişken alan üye işlevi her zaman çağırma kuralını kullanır __cdecl
.
Bu derleyici seçeneklerinin C++ yöntemlerinin ve işlevlerinin ad dekorasyonu üzerinde hiçbir etkisi yoktur. olarak extern "C"
bildirilmediği sürece, C++ yöntemleri ve işlevleri farklı bir ad dekorasyon şeması kullanır. Daha fazla bilgi için bkz . Süslü 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 sağdan sola yığına geçirilir. ARM ve x64 mimarilerinde bazı bağımsız değişkenler yazmaç tarafından geçirilir ve gerisi sağdan sola yığına geçirilir. Çağırma yordamı, bağımsız değişkenleri yığından açar.
C için adlandırma kuralı, __cdecl
bir alt çizginin ( _
); büyük/küçük harf çevirisi yapılmadan önce gelen işlev adını kullanır. olarak extern "C"
bildirilmediği sürece, C++ işlevleri farklı bir ad dekorasyon şeması kullanır. Daha fazla bilgi için bkz . Süslü Adlar.
__fastcall Özellikleri
İşlevin __fastcall
bazı bağımsız değişkenleri yazmaçlara geçirilir (x86 işlemciler, ECX ve EDX için) ve geri kalanı sağdan sola yığına gönderilir. Çağrılan yordam, bu bağımsız değişkenleri döndürmeden önce yığından açar. Genellikle, /Gr yürütme süresini azaltır.
Not
Satır içi derleme dilinde yazılmış herhangi bir işlev için çağırma kuralını kullanırken __fastcall
dikkatli olun. Yazmaç kullanımınız derleyicinin kullanımıyla çakışabilir.
C için adlandırma kuralı, __fastcall
önünde at işareti (@) bulunan işlev adını ve ardından işlevin bağımsız değişkenlerinin bayt cinsinden boyutunu kullanır. Büyük/küçük harf çevirisi yapılmaz. Derleyici, adlandırma kuralı için şu şablonu kullanır:
@function_name@number
Adlandırma kuralını kullandığınızda __fastcall
standart ekleme dosyalarını kullanın. Aksi takdirde çözümlenmemiş dış başvurular alırsınız.
__stdcall Özellikleri
İşlevin __stdcall
bağımsız değişkenleri sağdan sola yığına gönderilir ve çağrılan işlev, döndürmeden önce bu bağımsız değişkenleri yığından açar.
C için adlandırma kuralı, __stdcall
önünde bir alt çizgi (_) bulunan işlev adını ve ardından at işareti (@) ve işlevin bağımsız değişkenlerinin bayt cinsinden boyutunu kullanır. Büyük/küçük harf çevirisi yapılmaz. Derleyici, adlandırma kuralı için şu şablonu kullanır:
_functionname@number
__vectorcall Özellikleri
bir __vectorcall
işlevin tamsayı bağımsız değişkenleri değere göre geçirilir ve en çok iki (x86 üzerinde) veya dört (x64 üzerinde) tamsayı yazmacı kullanılır ve kayan nokta ve vektör değerleri için en fazla altı XMM yazmacı kullanılır ve geri kalanı sağdan sola yığına geçirilir. Çağrılan işlev, döndürmeden önce yığını temizler. Vektör ve kayan nokta dönüş değerleri XMM0'de döndürülür.
C için __vectorcall
adlandırma kuralı, işlev adını ve ardından iki işareti (@@) ve işlevin bağımsız değişkenlerinin bayt cinsinden boyutunu kullanır. Büyük/küçük harf çevirisi yapılmaz. Derleyici, adlandırma kuralı için şu şablonu kullanır:
functionname@@number
Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Gelişmiş özellik sayfasını seçin.
Çağırma Kuralı özelliğini değiştirin.
Bu derleyici seçeneğini program üzerinden ayarlamak için
- Bkz. CallingConvention.