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

ما الفرق بين الامتداد h و الا متداد cpp ؟

مغلق
بدأه بن حسن في 6 أبريل 2005 · 2 رد · 1,472 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ما الفرق بين الامتداد h و الا متداد cpp ؟

وشكرا

تم تعديل هذه المشاركة بواسطة بن حسن في 6 أبريل 2005 في 06:54

أسألكم الدعاء لأبي و أمي

#2

السلام عليكم

بالنسبة للملفات التي بامتداد h. ، فهي تسمى الملفات الرأسية header file وفي هذه الملفات يتم تعريف المتغيرات العامة(global variable) على مستوى ملفات البرنامج ، وأيضا يتم فيه كتابة الإعلان decleration الخاص بأي دالة (function) والصفوف (class) والقوالب (template)، ولكن لو تم كتابة إعلان الدوال والصفوف والقوالب في الملف الرأسي ، فلا بد أن يتم تعريف هذه الدوال والصفوف والقوالب ، فإنه يتم تعريفها في ملف آخر يسمى الملف المصدري source file ، حيث أن هذا الملف هو الذي يوجد به تعريف الدوال والصفوف والقوالب ، وهو أيضا الملف الذي تقوم أنت بكتابة البرنامج فيه.

نأخذ مثالا بسيطا للتوضيح:

نفرض أنه يوجد لدينا دالة اسمها cat ، فهذه الدالة لابد لها من إعلان وتعريف لها ، معنى كلمة إعلان أني أخبر ال compiler أنه يوجد هناك دالة باسم cat وهذه الدالة تستطيع أن تستقبل بيانات من نوع كذا وتعيد بيانات من نوع كذا

فالإعلان يكون هكذا

int cat (char c); // this is decleration

فهذا الإعلان يتم كتابته في الملف الرأسي h.

أما تعريف الدالة فهو أنك تقوم بكتابة العملية التي سوف تقوم بها الدالة ، هكذا

int cat (char c)
{
int v=5;
int d;
d= v+c;
//.....
}

وهذا التعريف يتم كتابته في الملف المصدري cpp.

جيد

ولكن لماذا سوف تحتاج إلى كتابة الإعلان في الملف الرأسي والتعريف في الملف المصدري؟

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

أتمنى أن تكون المعلومة قد وصلت

وأي شيء فالعبد لله في الخدمة

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

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#3

ملفات الـ cpp هي ملفات البرنامج, يعني لو عندك برنامج موزع على أكثر من ملف(حتى لو ملف واحد فقط), فهذه الملفات امتدادها عادة cpp.

أحيانا هناك function تريد استخدامه في أكثر من ملف, مثلا عندك فنشكن اسمه DisplayError, و تريد استخدامه في أكثر من ملف من هذه الملفات.

طبعا يجب ان تعرف هذا الـfunction, و لكن لو عرفته في أحد هذه الملفات, مثلا الملف errors.cpp و أردت استخدامه في ملف آخر, مثلا main.cpp, هنا ستحصل نفس المشكلة اللتي تنتج عندما تستخدم الفنكشن قبل تعريفه.

مثلا هنا:

int main()
{
   printMessege();

   return 0;
}

void printMessege()
{
    cout << "hello" << endl;
}

هنا استدعيت الفنكشن printMessege, و هو معرف في الأسفل, لكن في هذه اللحظة, الكومبايلر لا يعرف أنه موجود, لذلك إذا اردت استخدامه امامك خيارين: غما ان تضع تعريفه في الأعلى, أو ان تكتب prototype يعني تستطيع ان تقول انه تصريح يخبر الكومبايلر بوجود الفنكشن دون ان يعرفه, بل يخبره ان هذا الفنكشن موجود و أن تعريفه سيأتي فيما بعد.

فهكذا سيكون الحل عندما تكتب التصريح:

void printMessege(); //function prototype

int main()
{
   printMessege();

   return 0;
}

void printMessege()
{
    cout << "hello" << endl;
}

نفس المشكلة تحدث في حالة الملفات المتعددة: عندك فنكشن معرف في أحد الملفات و تريد استخدامه في ملف آخر, ما اللذي تفعله؟

تكتب prototype للفنكشن لكي يعلم الكومبايلر ان هناك فنكشن بهذا الاسم.

لو اردت استخدام عشر فنكشنات معرفة كلها في ملفات أخرى, فسيكون عليك كتابة التصريحات في كل مرة .. و كذلك لو كنت تريد اتخدام كل هذه الـ functions في عدة ملفات, فيجب ان تعيد كتابة نفس التصريحات في عدة ملفات.

الأفضل من ذلك, هو جمع هذه التصريحات كلها في ملف واحد, ثم نقوم بـ include لذلك الملف (اللذي يحتوي التصريحات) بدلا ان نكتب التصريحات.

لو عندك عشر functions, فبدلا من ان تكتب عشر اسطر من التصرياحات في كل مرة, فستكتب سطر Include واحد.

#include هو في الحقيقة macro, كل ما يفعله هو نسخ + لصق محتويات الملف المراد ضمه في الملف الحالي.

جرت العادة على اعطاء هذه الملفات .h و لكن في الحقيقة لا يوجد شيء مبني في اللغة يجبرك على ذلك, تستطيع ان تسمي الملف ما تشاء, بل تستطيع ان لا تعطي الملف أي امتداد. تستطيع تعمل ملف تسميه funcs ثم تكتب

#include "funcs"

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…