SORU
20 ŞUBAT 2011, Pazar


Neden C başlığındaki işlevleri satıriçi?

NBBu daha böyle yapılır neden satır içi işlevleri kullanmayı ya da nasıl çalıştıkları hakkında bir soru değil.

Sınıf üye işlev bildirimi tek işlevi gerçek olan bir uygulama inline şeklinde bir fonksiyon tanımlamak için gerekli değildir. Başlık dosyasında örneğin,:

struct foo{
    void bar(); // no need to define this as inline
}

Neden sınıfları bir işlevin satır içi uygulaması yaparvarüstbilgi dosyası için? Neden içi .cpp dosyası işlev koyabilir mi? .cpp dosyasında satır tanım koymak deneyin nerede olursa çizgisinde bir hata alıyorum:

error LNK2019: unresolved external symbol 
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main 
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe 
: fatal error LNK1120: 1 unresolved externals

CEVAP
20 ŞUBAT 2011, Pazar


inline bir fonksiyonun tanım nedeniyle bir üstbilgi dosyasında ama olmak zorunda değilbir tanım kuralısatır içi işlevleri için işlev için aynı tanımı kullanan her çeviri biriminde bulunması gerekir.

Bunu başarmak için en kolay yolu bir üstbilgi dosyasında tanımlı koyarak.

Eğer tek bir kaynak dosyada bir fonksiyon tanımını koymak istiyorsanız o zaman inline ilan etmemelisin. Bir işlevi yok inline derleyici olamaz işlevi satıriçi anlamına gelmez ilan etti.

İlan edip, bir işlevi inline genellikle hangi sürümü dayalı bir seçimdirbir tanımlama kurallarıseni takip etmek için en mantıklı; inline ekleme ve sonra bir sonraki kısıtlamaları ile sınırlı olmak pek bir anlam ifade etmiyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • hytchme

    hytchme

    9 Mart 2014
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008