2011-01-24 21 views
8

C/C++ 'da (özellikle, MSVS kullanıyorum), bir işlev tanımı için arama kuralı belirleme konusunda endişelenmeniz gereken durum nedir? Onlar hiç önemli mi? Gerektiğinde en uygun konvansiyonu seçme yeteneğine sahip değildir (yani, hızlı çağrı, vb.).MS Visual C++: Arama kurallarını ne zaman kullanmalısınız?

Belki de benim anlayışım eksiktir, ancak onların programlayıcıların argümanların yığına yerleştirildiği sıradaki gibi şeyler gibi şeyler için ihtiyaç duyacağı bir durumun ne zaman olacağını ve ne zaman olacağını görmüyorum. Ayrıca, derleyicinin en iyi duruma getirmesinin neden bu özel işlev için en iyi şekilde çalışırsa onu seçemeyeceğini de görmüyorum. Birinin bana sağlayabileceği herhangi bir bilgi harika olurdu. Teşekkürler!

+0

Windows 1.0'ın kötü tasarımından dolayı hiçbir neden olmadan iletilen tamamen çirkin bir miras düşüncesidir. Çağırdığınız kütüphane işlevleri için prototipler almak için doğru üstbilgileri kullandığınız sürece, belki de belirli bir çağrı kuralına sahip olmak için gereken geri çağırma işlevlerini yazarken, bunun hakkında herhangi bir çaba harcamanız gerekmez. –

+0

R, arama kurallarının hızlı kod için önemli olmayacağı anlamına mı geliyor? Sadece bir çağrı kuralı olan 64 bitlik nokta için – Mandrake

cevap

6

Yalnızca bir çağrı kuralı olduğundan 64 bit uygulamalara bakmanıza gerek yoktur.

Aşağıdaki durumlarda 32-bit uygulamalar için bakım gerekiyor:

  • Sen 3. parti kütüphaneleri ile etkileşim ve bu kütüphaneler için başlıklar doğru bir arama kuralını beyan etmedi.
  • Kullanmak için başkası için bir kitaplık veya DLL dosyası oluşturuyorsunuz. Çağrılı bir kongreye karar vermeniz gerekir, böylece kodunuzu çağırırken diğer kod doğru çağrı kurallarını kullanır. Eğer farklı derleyici tarafından derlenen ediliyor kod entegre yaparken genel anlamda
+1

+1. –

+1

aslında, 64 bit en az x86_64 iki çağrı kuralları var - Microsoft çağrı kuralı ve standart çağrı kuralı –

+0

Sadece şimdi 64 tane var olduğunu öğrendim – Mandrake

10

, çağrı kuralı önemlidir. Örneğin, müşterileriniz tarafından kullanılacak bir DLL yayınlıyorsanız, dışa aktardığınız işlevlerin tutarlı ve beklenen bir çağrı sözleşmesi olduğundan emin olmak istersiniz.

Tek bir program içinde derleyicinin genellikle her bir işlev için hangi arama kuralını kullanacağını seçebiliyorsunuz (ve kurallar genellikle oldukça basittir).

İlgili konular