/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

/Gdvarsayı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ı mainişlevler ve , veya __vectorcallolarak işaretlenmiş __cdecl__stdcalliş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ı mainişlevler ve , veya __vectorcallolarak işaretlenmiş __cdecl__fastcalliş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ı mainişlevler, değişken bağımsız değişken listesi olan vararg işlevler veya çakışan __cdeclbir , __stdcallveya __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.

Dekont

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, __vectorcallolarak __cdecliş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.

Dekont

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

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Gelişmiş özellik sayfasını seçin.

  3. Çağırma Kuralı özelliğini değiştirin.

Bu derleyici seçeneğini program üzerinden ayarlamak için

Ayrıca bkz.