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 | Çizgide | Makro |
---|---|---|
Temel | Satır içi işlevler derleyici tarafından ayrıştırılır. | Makrolar önişlemci tarafından genişletilir. |
Sözdizimi | satı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ğerlendirme | Argümanı yalnızca bir kez değerlendirir. | Her argüman kodda kullanıldığında argümanı değerlendirir. |
Genişleme | Derleyici tüm işlevleri satır içi değil ve genişletmeyebilir. | Makrolar her zaman genişletilir. |
Otomasyon | Sı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şme | Bir 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ırma | Satı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ıklama | Hata 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Satır içi bir işlev sınıf üyelerine erişebilir, oysa bir makro sınıf üyelerine asla erişemez.
- 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.
- 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.
- 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.