الاحظ في البرامج الكبيرة المكتوبة بالسي او السي ++
يتم تقطيع البرنامج الى ملفات وكل ملف يكون بهذا الشكل
" اسم الملف" include#
السؤال هنا كيف يمكنني عمل ذلك وكيف يكمنني ربط الملفات مع بعضها
وبالتالي كيف انفذه ؟؟؟؟
الاحظ في البرامج الكبيرة المكتوبة بالسي او السي ++
يتم تقطيع البرنامج الى ملفات وكل ملف يكون بهذا الشكل
" اسم الملف" include#
السؤال هنا كيف يمكنني عمل ذلك وكيف يكمنني ربط الملفات مع بعضها
وبالتالي كيف انفذه ؟؟؟؟
أخي ،
بالنسبة إلى تقطيع ملفات البرامج الكبيرة فهذا صحيح ولكن ليس ملفات الinclude هي العامل الأساسي فيه كما في ال unit في الباسكال .
عملية تحويل ملفاتك المصدرية (source) إلى ملف تنفيذي (exe) تتم على مرحلتين على الأقل ..
الأولى هي الترجمة : وهي عبارة عن ترجمة كل ملف c مثلا إلى لغة الآلة ويتم انتاج ملف هدف أو obj .
الثانية هي للبرط : وفيها يتم ربط ملفات الهدف مع بعضها من أجل انتاج الملف التنفيذي وهذه العملية هي مهمة من أجل تحديد ازاحات المتغيرات في البرنامج .
طبعا عملية كتابة أكثر من ملف من أجل برنامج واحد هي عملية تنظيم وجدا مهمة في السي أو السي++ وطبعا يجب أن يكون التقسيم منطقي . فمثلا إذا كنت تكتب برنامج تصميم رسوميات فملف من أجل الواجهة ، ملف من أجل الدائرة وملف من أجل الخط المستقيم وهكذا ...
إذا استخدمت الفيجوال ستديو أو الفيجوال سي++ في كتابة برنامجك فإن الفيجوال ستديو التي تقوم بتنظيم مشروعك هي التي تتولى عمليات الترجمة والربط على مشروعك مهما كان عدد الملفات التي فيه .
الآن لماذا تستخدم ملفات الheader في هذه الحالات بكثرة فهذا عائد إلى السبب التالي :
بما أن ملفات السي أو © تكون مخفية عن الملفات الأخرى وقت الترجمة فهذا يستدعي وجود تعريف (فقط تعريف) لما تحتويه الملفات الأخرى في حالة أردت استخدام تابع أو متحول معرف في ملف آخر . قد يكون الكلام غامض بعض الشئ لكن إليك بالمثال التالي :
ملف main.c يستخدم تابع getmax المكتوب في ملف num.c فيجب من أجل أن تتم عملية ترجمة الملف main.c بشكل صحيح من أن يتم تعريف التابع getmax وهذا التعريف يتم في ملف header يسمى بالعادة مثل اسم ملف السي ولكن بامتداد آخر ، في مثالنا سوف يكون الاسم num.h . لذا يجب أن تتم عملية include للملف هذا في main.c . سوف تتم عملية الترجمة بنجاح وسوف يتولى الlinker من عملية ربط الاستدعائات والمتحولات ببعضها ..
Coding on the Cloud and for the Cloud!
هذا الموضوع مغلق.