موجات محول الصياغة ( المترجم ) في السى بلس بلس

موجات محول الصياغة ( المترجم ) في C++

قد يعتقد أن السطر الأول في البرنامج , ألا وهو
# Include <iostream.h>
عبارة من عبارات البرنامج , ولكنه ليس كذلك في واقع الأمر ؛ فهو ليس سطرا من محتوي الدالة , ولا ينتهي بفاصلة منقوطة . بل أنه كما تري يبدأ برمز غريب "#", وهو ما يسمي " موجه محول الصياغة , أو موجه ما قبل المعالج Preprocessor derective " . فبينما تعتبر أسطر الدوال توجيهات لمعالج الحاسوب لتنفيذ مهام البرنامج, فإن موجه ما قبل المعالج يوجه المترجم ذاته , إذ توجد في برنامج تحويل صياغة البرنامج (الترجمة) وحدة تسمي " ما قبل المعالج Preprocessor " تتعامل مع هذه الموجهات قبل أن يبدأ الترجمة الفعلية .

الموجه include #

الموجه include # يخبر المترجم أن يضم إلي ملف الهدف ملف أخر , وهو الذي يلي الموجه ويكون اسمه محاطا بالعلامتين < > ويسمي مثل هذا الملف " الملف التصديري header file " لكونه يتصدر البرنامج , أو " ملف التضمين include file " لكونه يضمن في البرنامج .

الملفات التصديرية ( ملفات التضمين )

في مثالنا first.cpp صدر أمر للمترجم من الموجه include # بأن يضيف لملف المصدر ملف أخر هو iostream.h وذلك بالتوجيه :
Include <iostream.h>#
فما هو هذا الملف ؟ إنه مثال لما يسمي " الملفات التصديرية header files " أو الملفات المضمنه include file " , وتحتوي هذه الملفات علي معلومات ضرورية للمترجم لكي يتمكن من القيام بواجبه , فمثلا يحتوي الملف iostream.h علي الإعلان عن الكائن cout والمؤثر << , وبالتالي سوف يصدر رسالة خطأ . ( استخدام ملفات التقدمة اختياري في كثير من الحالات في لغة السي التقليدية , أما في السى بلس بلس فهي إجبارية في كافة الأحوال ) .
ولسوف نعود إلي موضوع الملفات التصديرية في نهاية الفصل , حين نعرض لموضوع الدوال المكتبية .
والموجه include # هو واحد من موجهات عديدة , كلها مميزة بالمحرف # , سنعرض للمزيد منها مع تقدمنا في الدراسة .

التعليقات

التعليقات جزء هام في أي برنامج , فهي توضح لكاتب البرنامج ولغيره كيف تسير خطواته . ويتجاهل هذه التعليقات , ولذا فلا تأثير لها علي حجم البرنامج التنفيذي أو وقت تنفيذه .
صياغة التعليقات
فلنكتب البرنامج مرة ثانية , مضيفين إليه التعليقات :

Comment.cpp

comments.cpp


 


// comments.cpp


// demonstrates comments


#include <iostream.h>           // preprocessor directive


 


void main()                     // function name


   {                            // start function body


   cout << "Every age has a language of its own";  // statement


   }                            // end function body




تبدأ التعليقات بالعلامة // وتنتهي بنهاية السطر ( تعتبر هذه إحدي الحالات الاستثنائية التي لا يتجاهل فيها المترجم الفراغات ولا الانتقال للسطر الجديد ) . ويمكن أن يكون التعليق في بداية سطر جديد , أو في نهاية سطر من أسطر البرنامج , وكلتا الحالتين مبينتان في المثال المعطي .


متي نستخدم التعليقات ؟



كتابة التعليقات عادة حميدة علي وجه العموم , وللأسف ألا يلجأ لها بعض المترجمين بالقدر الكافي . وإذا إنتابتك رغبة في تجاهل هذه العادة , فلتتذكر أنه ليس كل الناس بقدر ذكائك ؛ فهم محتاجون لشرح أكثر يعرفون به منطلق البرنامج . ومن وجهة أخري , فقد لا تكون أنت بنفس ذكائك الحالي بعد فترة فتحتاج أنت أيضا إلي تذكر ما فعلته بيديك .


وبالنظر للتعليق في نهاية السطر يمكن معرفة المقصود منه . ويجب أن يركز التعليق علي الخطوط العامة , موضحا الهدف من العبارة المختارة .


صياغة أخري للتعليقات



من الممكن أن تصاغ التعليقات باستخدام الصورة التقليدية في السي , وهي الصورة التالية :


/* this is an old-style comment */


وفيها تستخدم العلامتان */ في بداية التعليق ونهايته , وهي وسيلة ليست مريحة تماما , ولكنها مفيدة في بعض المواضع :


مثلا , في حالة وضع التعليق علي أكثر من سطر ,علي الصورة التالية :


/* this is


A very


Long


Comment


/*


حيث يتجاهل المترجم في هذه الحالة –طبقا للقاعدة العامة – الإنتقال لسطر الجديد . ويغنينا ذلك عن وضع العلامتين // في بداية كل سطر .


وأيضا ؛ في حالة وضع تعليق وسط العبارة , علي الصورة التالية :


{ /* impty function body*/ }


ولو أننا استخدمنا هنا العلامتين // لاعتبر القوس الحلزوني الأخير جزءا من التعليق , حيث إن المترجم يأخذ التعليق علي أنه مستمر لنهاية السطر .

التسميات: