الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما المقصود بالماكرو ؟

مغلق
بدأه آل عيد في 27 يوليو 2001 · 5 رد · 3,749 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله لرحمن الرحيم

السلام عليكم

الأخوة الأعزاء ما المقصود بالماكرو ؟

#2

الماكرو ياصديقي هو

مجموعه من الاوامر الجاهزة تنفذ بصورة متتابعه وتكون عادة في برامج اوفيس مثلا لو قمت بعمل ماكروا في اكسس كالتالي

افتح النافذة A

كبر النافذة A

اعمل فلترة على قاعدة البيانات B

اخرج النتائج في تقرير C

اطبع التقرير G

يعني قمنا بتخزين اكثر من عملية ليقوم بها هذا الماكرو داخل اجراء واحد ليقوم بعملها جميعا متتابعه

طبعا من الممكن عملا لكثير وانا لست اعرف الكثير بها ولكن هذا توضيح بها

جديد مدونتي الشخصية http://www.badwi.com

ادعو لنا بظاهر الغيب

MyBooksExchange.jpg

#3

السلام عليكم.

تعقيباً على كلام الأخ محمد بدوي فكما قال أنها مجموعة من الأوامر الجاهزة تنفذ بصورة متتابعة و يمكن أن تكون هذه الأوامر أوامر للتعامل مع بيئة البرنامج مثل مثال الأخ محمد و يمكن أن تكون عبارة عن شيفرة ففي Visual C يوجد مثلا الماكرو ON_COMMAND( id, memberFxn ) و الذي مهمته تحويل (الرسائل التي تصل إلى id ) الى التابع memberFxn .

مع التحيات.

#4

الأخوة الأعزاء

كنت أقصد ما الفرق بين الإجراءات العادية والماكرو ، مثلا لجعل النافذة تستقبل أحد الأحداث نستخدم ماكرو Message_Map حيث يضاف إلى إعلانات الفئة هكذا :

class test : CFrameWnd
{
   ........
public:
   ........
   ........
   DECLARE_MESSAGE_MAP()
}

ونعرفه هكذا :

BEGIN_MESSAGE_MAP(test, CFrameWnd)
   ON_WM_SIZE()
END_MESSAGE_MAP()

الآن قام الماكرو بتعريف الحدث OnSize ولكن السؤال هل تتم ترجمة الماكرو من الكومبايلر أم البريبرسسير وأين يكون موجود ومالفرق بين إجراء عادي وماكرو ؟

ولو أمكن كتابة ماكرو للتوضيح .

وشكرا لكم ، أخوكم .

#5

أخي،

الماكرو في ال ++C هو عبارة عن تصريح DEFINE وقد يكون له بارامترات أو لا يكون . وكما تعلم فإنك إذا عرقت define في برنامجك لتصريح ما مثل :

#define   MY_VAL       10

فإن المترجم أثناء عملية الترجمة يقوم باستبدال أي كلمة يجدها MY_VAL بالقيمة 10

الماكرو نفس الموضوع . مثلا أنت تريد أن تكتب ماكرو يطبع الكلمة Test على الشاشة فيكون كالتالي :

#define   PRINT()      printf(“Test”)

وبالتالي عندما تكتب بعد ذلك في البرنامج العبارة

PRINT(); فإن المترجم يحل محلها العبارة :

 
Printf(“Test”);

أما الماكروات ذات البارامترات فهي الأكثر انتشارا .. وهي مقيدة جدا .. مثلا تريد كتابة ماكرة من أجل ارجاع القيمة الأصغر بين قيمتين فيكون :

#define   MIN(a, B)        (a B)

الآن كلما يجد المترجم العبارة MIX( 1, 2) مهما تكن البارامترات فإنه يستبدلها ب :

(1 < 2 ? 1 : 2) ..

بالنسبة لل MFC فيجود العديد من الماكروات التي تسهل من البرمجة ومنها كما ذكرت BEGIN_MESSAGE_MAP وغيرها وهذه الماكروات ليست بسيطة أي قد تجدها تمتد إلى عدة أسطر وممكن أن تبحث عنها في شيقرة ال MFC المفتوحة وتقرئها .. أكثر هذه الماكروات موجودة في الملف afxwin.h . وعلى سبيل المثال ترى أن DECLARE_MESSAGE_MAP معرفة على الصورة :

#define DECLARE_MESSAGE_MAP() 
private: 
	static const AFX_MSGMAP_ENTRY _messageEntries[]; 
protected: 
	static AFX_DATA const AFX_MSGMAP messageMap; 
	virtual const AFX_MSGMAP* GetMessageMap() const;

ملاحظة : علامة الهروب () المستخدمة بعد انتهاء كل سطر في الماكرو تخبر المترجم أن السطر الذي يلي هو تابع للماكرو .

بالنسبة لشرح ماكروات الرسائل في ال MFC فسوف أفصل في ذلك في الدرس بعد القادم في سلسلة تعليم الفيجوال سي ...

طبعا فائدة الماكرو هي :

  • الاختصار في وقت كتابة الأكواد الي تستعملها باستمرار وبكثرة
  • تخفيف تعقيد بعض العبارات
  • طبعا بعض الأحيان يمكن كتابة روتين يؤدي الغرض ولكن الماكرو أسرع لأنه لا يحتاج إلى مناداة التابع . وهي تشبه ال inline في عملها

ولكن استخدام الماكروات الكبيرة بكثرة قد تؤدي إلى زيادة حجم الكود ..

:)

Coding on the Cloud and for the Cloud!

My Blog

#6

. Thank you Astath Hani

(sorry this computer dosen't supprt arabic)

هذا الموضوع مغلق.

مواضيع مشابهة