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

Yazar: Laura McKinney
Yaratılış Tarihi: 2 Nisan 2021
Güncelleme Tarihi: 13 Mayıs Ayı 2024
Anonim
C ++ 'da Satır İçi ve Makro Arasındaki Fark - Teknoloji
C ++ 'da Satır İçi ve Makro Arasındaki Fark - Teknoloji

İçerik


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şlev arasındaki bir temel fark şudur: satır içi işlevler sırasında genişletilir derleme, ve makrolar Program tarafından işlendiğinde genişletilir. önişlemci.

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

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. Sonuç

Karşılaştırma Tablosu

Karşılaştırma için temelÇizgideMakro
Temel Satı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.Argümanı kodda her kullanıldığında değerlendirir.
Genişleme Derleyici 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şlev, 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ı

Satır içi bir işlev normal bir işleve benziyor ancak daha önce “Çizgide“. Satır içi işlevler, çağrılma yerine genişletilen kısa uzunluklu işlevlerdir. Örnek olarak satır içi işlevleri anlayalım.

#Dahil etmek namespace 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} geçersiz ekran () {cout << a << "" <

Yukarıdaki programda, “example” sınıfındaki satır içi bir işlev olarak initialize () işlevini 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şlevlerden kaçınılır. .
  • 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 azaltır, ancak bazen satır içi işlevinin uzunluğu daha büyükse, kopyalanan kod nedeniyle programın boyutu da artar. 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ımı gereği bu makroyu değiştirir. Dolayısıyla, makro “değiştirme” olarak kabul edilir. Makroyu bir örnek ile inceleyelim.

#Dahil etmek #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 ikame 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 hiçbir zaman 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 bir boyutta olmalıdır.
  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 “Çizgide”Oysa, bir makro tanımlamak için kullanılan anahtar kelime“#tanımlamak“.
  3. Satır içi işlevi bir sınıf içinde çözüldüğünde, sınıf içinde veya sınıf 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ı gerekirken, 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, böylece 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 parantezleri içine 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.