بسم الله لرحمن الرحيم
السلام عليكم
الأخوة الأعزاء ما المقصود بالماكرو ؟
بسم الله لرحمن الرحيم
السلام عليكم
الأخوة الأعزاء ما المقصود بالماكرو ؟
الماكرو ياصديقي هو
مجموعه من الاوامر الجاهزة تنفذ بصورة متتابعه وتكون عادة في برامج اوفيس مثلا لو قمت بعمل ماكروا في اكسس كالتالي
افتح النافذة A
كبر النافذة A
اعمل فلترة على قاعدة البيانات B
اخرج النتائج في تقرير C
اطبع التقرير G
يعني قمنا بتخزين اكثر من عملية ليقوم بها هذا الماكرو داخل اجراء واحد ليقوم بعملها جميعا متتابعه
طبعا من الممكن عملا لكثير وانا لست اعرف الكثير بها ولكن هذا توضيح بها
السلام عليكم.
تعقيباً على كلام الأخ محمد بدوي فكما قال أنها مجموعة من الأوامر الجاهزة تنفذ بصورة متتابعة و يمكن أن تكون هذه الأوامر أوامر للتعامل مع بيئة البرنامج مثل مثال الأخ محمد و يمكن أن تكون عبارة عن شيفرة ففي Visual C يوجد مثلا الماكرو ON_COMMAND( id, memberFxn ) و الذي مهمته تحويل (الرسائل التي تصل إلى id ) الى التابع memberFxn .
مع التحيات.
الأخوة الأعزاء
كنت أقصد ما الفرق بين الإجراءات العادية والماكرو ، مثلا لجعل النافذة تستقبل أحد الأحداث نستخدم ماكرو Message_Map حيث يضاف إلى إعلانات الفئة هكذا :
class test : CFrameWnd
{
........
public:
........
........
DECLARE_MESSAGE_MAP()
}ونعرفه هكذا :
BEGIN_MESSAGE_MAP(test, CFrameWnd) ON_WM_SIZE() END_MESSAGE_MAP()
الآن قام الماكرو بتعريف الحدث OnSize ولكن السؤال هل تتم ترجمة الماكرو من الكومبايلر أم البريبرسسير وأين يكون موجود ومالفرق بين إجراء عادي وماكرو ؟
ولو أمكن كتابة ماكرو للتوضيح .
وشكرا لكم ، أخوكم .
أخي،
الماكرو في ال ++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 فسوف أفصل في ذلك في الدرس بعد القادم في سلسلة تعليم الفيجوال سي ...
طبعا فائدة الماكرو هي :
ولكن استخدام الماكروات الكبيرة بكثرة قد تؤدي إلى زيادة حجم الكود ..
:)
Coding on the Cloud and for the Cloud!
. Thank you Astath Hani
(sorry this computer dosen't supprt arabic)
هذا الموضوع مغلق.