Tavsiye, 2024

Editörün Seçimi

C ++ 'da Satır İçi ve Makro Arasındaki Fark

Makro, çağrıldığı zaman genişleyen bir talimattır. İşlevler ayrıca makrolar gibi tanımlanabilir. Benzer şekilde, satır içi işlevleri de çağrılma noktasında genişler. Satır içi ve makro işlevi arasındaki temel farklardan biri, satır içi işlevlerin derleme sırasında genişletilmesi ve programın önişlemci tarafından işlenmesi durumunda makroların genişletilmesidir.

Karşılaştırma tablosu yardımı ile satır içi ve makro arasındaki farkı inceleyelim.

Karşılaştırma Tablosu

Karşılaştırma için temelÇizgideMakro
TemelSatır içi işlevler derleyici tarafından ayrıştırılır.Makrolar önişlemci tarafından genişletilir.
Sözdizimisatır içi return_type funct_name (parametreler) {. . . }#define macro_name char_sequence
Kullanılan Anahtar KelimelerÇizgide
#tanımlamak
TanımlıSınıfın içinde veya dışında tanımlanabilir.Programın başında her zaman tanımlanır.
DeğerlendirmeArgümanı yalnızca bir kez değerlendirir.Her argüman kodda kullanıldığında argümanı değerlendirir.
GenişlemeDerleyici tüm işlevleri satır içi değil ve genişletmeyebilir.Makrolar her zaman genişletilir.
OtomasyonSınıf içinde tanımlanan kısa fonksiyonlar otomatik olarak satır içi fonksiyonlara yapılır.Makrolar özel olarak tanımlanmalıdır.
erişmeBir satır içi üye işlevi, sınıfın veri üyelerine erişebilir.Makrolar asla sınıfın üyesi olamazlar ve sınıfın veri üyelerine erişemezler.
SonlandırmaSatır içi işlevinin tanımı, satır içi işlevinin sonundaki küme parantezleriyle sona erer.Makro tanımı yeni satırla sonlanır.
Hata ayıklamaHata ayıklama, satır içi bir işlev için derleme sırasında hata denetimi yapıldığı için kolaydır.Derleme sırasında hata denetimi olmadığından hata ayıklama makrolar için zorlaşır.
bağlayıcıBir satır içi işlevi, işlev gövdesindeki tüm ifadeleri işlevin gövdesiyle başlar ve küme parantezleriyle biter.Bir makro, sonlandırma sembolü bulunmadığından, birden fazla ifadeye sahipse ciltleme sorunuyla karşı karşıya kalır.

Inline'un tanımı

Bir satır içi işlev normal bir işleve benziyor ancak daha önce “ satır içi ” anahtar sözcüğünden önce geliyor. Satır içi işlevler, çağrılma yerine genişletilen kısa uzunluklu işlevlerdir. Satır içi fonksiyonlarını bir örnekle anlayalım.

 # İsim alanı std kullanarak; sınıf örneği {int a, b; public: satır içi boşluğu başlat (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

Yukarıdaki programda, “example” sınıfındaki satır içi bir işlev olarak initialization () fonksiyonunu ilan ettim ve tanımladım. İnitialization () işlevinin kodu, “example” sınıfının nesnesi tarafından çağrıldığı yerde genişler. Sınıf örneğinde tanımlanan işlev ekranı (), satır içi olarak bildirilmez, ancak derleyici tarafından satır içi olarak kabul edilebilir. C ++ 'da sınıf içinde tanımlanan fonksiyon, fonksiyonun uzunluğunu göz önüne alarak derleyici tarafından otomatik olarak satır içi yapılır.

  • Satır içi işlevi, arama ve geri dönme işlevinin ek yükünü azaltır; bu da programın yürütme süresini azaltır. Ayrıca, argümanlar yığına itilir ve bir işlev çağrıldığında kayıtlar kaydedilir ve işlev geri döndüğünde sıfırlanır, bu işlem zaman alır, her seferinde yerel değişkenler ve biçimsel parametreler oluşturmaya gerek olmadığından satır içi işlevler tarafından önlenir .
  • Satır içi işlevler, sınıfın bir üyesi olabilir ve ayrıca sınıfın veri üyesine de erişebilir.
  • Satır içi işlevi, programın yürütme süresini kısaltır ancak bazen satır içi işlevinin uzunluğu daha büyükse, yinelenen kod nedeniyle programın boyutu da artacaktır. Bu nedenle, çok küçük işlevlerin satır içi yapılması iyi bir uygulamadır.
  • Satır içi işlevinin argümanı yalnızca bir kez değerlendirilir.

Makro tanımı

Makro bir “önişlemci yönergesi” dir. Derleme işleminden önce, program önişlemci tarafından incelenir ve programdaki makroyu nerede bulursa tanımlamasıyla bu makroyu değiştirir. Dolayısıyla, makro "metin değiştirme" olarak kabul edilir. Makroyu bir örnek ile inceleyelim.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (geçersiz) {cout << "10 ve 20'den büyük" << GREATER ("20", "10") << "\ n"; 0 döndür; } 

Yukarıdaki kodda, her iki parametrenin daha büyük sayısını karşılaştıran ve bulan bir tane olan GREATER () işlevini de açıkladım. Makroyu yalnızca yeni satırla sonlandırıldığı için makroyu sonlandırmak için noktalı virgül olmadığını görebilirsiniz. Bir makro sadece bir metin değişikliği olduğundan, çağrıldığı makro kodunu genişletir.

  • Makrolar, programlayıcıların okurken programdaki tüm makroları tanımasını kolaylaştırmak için her zaman büyük harflerle tanımlanır.
  • Makro asla bir sınıfın üye işlevi olamaz ve herhangi bir sınıfın veri üyelerine de erişemez.
  • Makro işlevi, argümanı beklenmedik bir sonuçla sonuçlanan tanımında göründüğü her zaman değerlendirir.
  • Büyük makrolar gereksiz yere kodun boyutunu artıracağından, makro daha küçük boyutta olmalıdır.

Satır içi ve makro arasındaki anahtar farklar

  1. Satır içi ve makro arasındaki temel fark, satır içi işlevlerin derleyici tarafından ayrıştırılmasıdır, oysa programdaki makrolar önişlemci tarafından genişletilir.
  2. Bir satır içi işlevi tanımlamak için kullanılan anahtar kelime " satır içi " iken, bir makroyu tanımlamak için kullanılan anahtar kelime " #define " dır.
  3. Satır içi işlevi bir sınıfın içine girdiğinde, bir sınıfın içinde veya bir sınıfın dışında tanımlanabilir. Öte yandan, programın başında her zaman bir makro tanımlanır.
  4. Satır içi işlevlere iletilen argüman derleme sırasında yalnızca bir kez değerlendirilirken, makrolar argümanı kodda her makro kullanıldığında değerlendirilir.
  5. Derleyici, bir sınıf içinde tanımlanan tüm fonksiyonları satır içi ya da genişletmeyebilir. Öte yandan, makrolar her zaman genişletilir.
  6. Satır içi anahtar sözcüğü olmayan bir sınıf içinde tanımlanan kısa işlev otomatik olarak satır içi işlevler yapılır. Öte yandan, Makro özel olarak tanımlanmalıdır.
  7. Satır içi bir işlev sınıf üyelerine erişebilir, oysa bir makro sınıf üyelerine asla erişemez.
  8. Satır içi bir işlevi sonlandırmak için kapalı bir küme ayracı gerekir, oysa yeni bir satırın başlangıcında bir makro sonlandırılır.
  9. Hata ayıklama, herhangi bir hata için derleme sırasında kontrol edildiğinden, dahili işlev için kolaylaşır. Öte yandan, bir makro derlenirken kontrol edilmez, bu yüzden bir makroyu ayıklamak zorlaşır.
  10. Bir işlev olarak bir satır içi işlevi, üyelerini başlangıç ​​ve kapalı küme parantezlerine bağlar. Öte yandan, makroda herhangi bir sonlandırma sembolü yoktur, bu nedenle makro birden fazla ifade içerdiğinde bağlanma zorlaşır.

Sonuç:

Satır içi işlevler makro işlevinden çok daha ikna edicidir. C ++ ayrıca bir "const" anahtar sözcüğü kullanan bir sabit tanımlamak için daha iyi bir yol sağlar.

Top