الفرق بين المضمنة وماكرو في C ++

مؤلف: Laura McKinney
تاريخ الخلق: 2 أبريل 2021
تاريخ التحديث: 14 قد 2024
Anonim
Differences between C and MATLAB (Kevin Lynch)
فيديو: Differences between C and MATLAB (Kevin Lynch)

المحتوى


الماكرو هو تعليمة يتمدد في وقت الاحتجاج بها. يمكن أيضًا تعريف الوظائف ، مثل وحدات الماكرو. وبالمثل ، تتوسع الدوال المضمّنة أيضًا عند نقطة الاحتجاج بها. الفرق الأساسي واحد بين وظيفة مضمنة و الماكرو هو أن وظائف مضمنة يتم توسيعها خلال التحويل البرمجي، و ال وحدات الماكرو يتم توسيع عندما تتم معالجة البرنامج من قبل المعالج.

دعنا ندرس الفرق بين المضمنة والماكرو بمساعدة مخطط المقارنة.

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. خاتمة

رسم بياني للمقارنة

أساس للمقارنةفي النسقدقيق
الأساسي يتم تحليل الدالات المضمّنة بواسطة المحول البرمجي.يتم توسيع وحدات الماكرو من قبل المعالج.
بناء الجملةمضمنة return_type funct_name (معلمات) {. . . }#define macro_name char_sequence
الكلمات الرئيسية المستخدمةفي النسق
#حدد
يعرفيمكن تعريفها داخل أو خارج الفصل.يتم تعريفه دائمًا في بداية البرنامج.
تقييميقيم الوسيطة مرة واحدة فقط.يقوم بتقييم الوسيطة في كل مرة يتم استخدامه في التعليمات البرمجية.
توسيع قد لا المحول البرمجي مضمنة وتوسيع كافة الوظائف.يتم دائمًا توسيع وحدات الماكرو.
التشغيل الآلييتم إجراء الوظائف القصيرة ، المعرفة داخل الفصل تلقائيًا على وظائف مضمنة.يجب تحديد وحدات الماكرو على وجه التحديد.
الوصوليمكن لدالة عضو مضمنة الوصول إلى أعضاء بيانات الفصل.لا يمكن أن تكون وحدات الماكرو أعضاء في الفصل ولا يمكنها الوصول إلى أعضاء بيانات الفصل.
نهايةينتهي تعريف الدالة المضمنة مع الأقواس المعقوفة في نهاية الوظيفة المضمنة.تعريف الماكرو ينتهي بالسطر الجديد.
التصحيحالتصحيح سهل لوظيفة مضمّنة كما يتم التحقق من الأخطاء أثناء الترجمة.تصحيح الأخطاء يصبح من الصعب على وحدات الماكرو كما لا يحدث تدقيق الأخطاء أثناء الترجمة.
ربطتقوم دالة مضمنة بربط جميع العبارات في نص الوظيفة بشكل جيد للغاية حيث يبدأ نص الوظيفة وينتهي بأقواس معقوفة.يواجه الماكرو مشكلة الربط إذا كان لديه أكثر من عبارة واحدة ، حيث لا يوجد لديه رمز إنهاء.


تعريف مضمنة

تبدو الوظيفة المضمنة كدالة عادية ، ولكن تسبقها الكلمة الأساسية "في النسق". الدالات المضمّنة هي وظائف ذات طول قصير يتم توسيعها في نقطة الاحتجاج ، بدلاً من استدعاءها. دعونا نفهم الدوال المضمنة بمثال.

#تتضمن استخدام اسم للمحطة؛ مثال فئة {int a، b؛ عام: التهيئة المضمّنة للتهيئة (int x، int y) {a = x؛ b = y} void display () {cout << a << "" <

في البرنامج المذكور أعلاه ، قمت بتعريف وتعريف (تهيئة) الدالة () كدالة مضمّنة في فئة "المثال". سيتم توسيع رمز دالة التهيئة () حيث يتم استدعاؤها بواسطة كائن الفئة "مثال". لم يتم التصريح عن عرض الوظيفة () ، المحدد في مثال الفئة ، في السطر ولكن يمكن أن يعتبره المترجم مضمّنًا ، في C ++ ، يتم تحديد الوظيفة المحددة داخل الفصل تلقائيًا بواسطة برنامج التحويل البرمجي مع الأخذ في الاعتبار طول الوظيفة.


  • تقلل الدالة المضمنة مقدار الحمل الإضافي لاستدعاء الوظيفة والعودة مما يقلل بدوره من وقت تنفيذ البرنامج.أيضًا ، يتم دفع الوسائط إلى المكدس ويتم حفظ السجلات عند استدعاء دالة وإعادة ضبطها عند إرجاع الوظيفة ، والتي تستغرق وقتًا ، يتم تجنب ذلك بواسطة الوظائف المضمنة حيث لا توجد حاجة إلى إنشاء متغيرات محلية ومعلمات رسمية في كل مرة .
  • يمكن أن تكون الدالات المضمّنة عضوًا في الفصل ويمكنها أيضًا الوصول إلى عضو بيانات الفصل.
  • تقلل الدالة المضمّنة وقت تنفيذ البرنامج ، لكن في بعض الأحيان إذا كان طول الوظيفة المضمّنة أكبر ، فسيزيد حجم البرنامج أيضًا بسبب الكود المكرر. وبالتالي ، من الممارسات الجيدة تضمين وظائف صغيرة جدًا.
  • يتم تقييم وسيطة الدالة المضمنة مرة واحدة فقط.

تعريف ماكرو

الماكرو هو "التوجيه قبل المعالجين". قبل التحويل البرمجي ، يتم فحص البرنامج من قبل المعالج الأولي وفي أي وقت يجد فيه الماكرو في البرنامج ، فإنه يستبدل هذا الماكرو بتعريفه. وبالتالي ، يعتبر الماكرو "البديل". دعونا دراسة الماكرو مع مثال.

#تتضمن #define GREATER (a، b) ((a <b)؟ b: a) int main (void) {cout << "أكبر من 10 و 20 هو" << GREATER ("20"، "10") << " ن". عودة 0 ؛ }

في التعليمة البرمجية أعلاه ، أعلنت عن دالة ماكرو GREATER () ، والتي تقارن وتجد العدد الأكبر لكلتا المعلمتين. يمكنك ملاحظة أنه لا يوجد فاصلة منقوطة لإنهاء الماكرو حيث يتم إنهاء الماكرو فقط بواسطة السطر الجديد. نظرًا لأن الماكرو مجرد بديل ، فسوف يقوم بتوسيع رمز الماكرو حيث يتم استدعاءه.

  • يتم تعريف وحدات الماكرو دائمًا بالأحرف الكبيرة فقط ليسهل على المبرمجين تحديد جميع وحدات الماكرو في البرنامج أثناء القراءة.
  • لا يمكن أن يكون الماكرو أبدًا وظيفة عضو في الفئة ، ولا يمكنه الوصول إلى أعضاء البيانات في أي فئة.
  • تقوم دالة الماكرو بتقييم الوسيطة في كل مرة تظهر في تعريفها مما ينتج عنه نتيجة غير متوقعة.
  • يجب أن يكون حجم الماكرو أصغر حيث إن وحدات الماكرو الأكبر ستزيد حجم الرمز دون داع.
  1. الفرق الأساسي بين المضمنة والماكرو هو أنه يتم تحليل الدالات المضمنة بواسطة المحول البرمجي بينما يتم توسيع وحدات الماكرو في برنامج بواسطة المعالج المسبق.
  2. الكلمة الأساسية المستخدمة لتحديد دالة مضمنة هي "في النسقفي حين أن الكلمة الأساسية المستخدمة لتعريف الماكرو هي "#حدد“.
  3. بمجرد أن تكون الوظيفة المضمنة decalre داخل الفصل ، يمكن تعريفها إما داخل الفصل أو خارج الفصل. من ناحية أخرى ، يتم تعريف الماكرو دائمًا في بداية البرنامج.
  4. يتم تنشيط الوسيطة التي تم تمريرها إلى الدالات المضمّنة مرة واحدة فقط أثناء التحويل البرمجي ، بينما يتم تقييم وسيطة وحدات الماكرو في كل مرة يتم فيها استخدام ماكرو في التعليمات البرمجية.
  5. قد لا يقوم المحول البرمجي بتضمين وتوسيع كل الوظائف المعرفة داخل الفصل. من ناحية أخرى ، يتم توسيع وحدات الماكرو دائمًا.
  6. وظيفة قصيرة التي يتم تعريفها داخل فئة دون الكلمة الأساسية المضمنة يتم تلقائيا وظائف مضمنة. من ناحية أخرى ، يجب تحديد ماكرو على وجه التحديد.
  7. يمكن لدالة مضمّنة الوصول إلى أعضاء الفصل ، بينما لا يمكن لماكرو الوصول إلى أعضاء الفصل.
  8. لإنهاء دالة مضمنة ، يلزم وجود دعامة مغلقة مجعد ، في حين يتم إنهاء ماكرو مع بداية سطر جديد.
  9. يصبح تصحيح الأخطاء سهلاً على وظيفة inlne حيث يتم التحقق منه أثناء التحويل البرمجي لأي خطأ. من ناحية أخرى ، لا يتم فحص ماكرو أثناء التحويل البرمجي لذلك ، يصبح تصحيح ماكرو أمرًا صعبًا.
  10. كونها دالة ، تقوم دالة مضمنة بربط أعضائها داخل بداية وأقواس متعرجة مغلقة. من ناحية أخرى ، ليس لدى الماكرو أي رمز إنهاء لذلك ، يصبح الربط صعبًا عندما يحتوي الماكرو على أكثر من عبارة واحدة.

الاستنتاجات:

الدالات المضمّنة أكثر إقناعًا من دالة الماكرو. يوفر C ++ أيضًا طريقة أفضل لتحديد ثابت ، والذي يستخدم كلمة أساسية "const".