هل يمكن استخدام متغيرات خارجية في اكثر من ملف يعني مثلا:
ملف:a.c
به متغيرات خارجية
وبعدين
عملنا include للملف a.c
في ملف اسمه b.c
هل يمكن استخدام المتغيرات الخارجية كما هي
ارجو التوضيح لأن هذه الجزئية مش فاهمها
هل يمكن استخدام متغيرات خارجية في اكثر من ملف يعني مثلا:
ملف:a.c
به متغيرات خارجية
وبعدين
عملنا include للملف a.c
في ملف اسمه b.c
هل يمكن استخدام المتغيرات الخارجية كما هي
ارجو التوضيح لأن هذه الجزئية مش فاهمها
مفيش توقيع
لا تعمل include على ملفات c او cpp, اعملها فقط على ملفات .h
بالنسبة لسؤالك, نعم تستطيع, و حتى بدون include, المسألة بسيطة:
اذا عندك ملف اسمه a.cpp يحتوي على global variable اسمه مثلا
int ag;
و عندك ملف آخر اسمه b.cpp و تريد استخدام المتغير ag فعليك ان تكتب في الملف b.cpp:
extern int ag;
extern تعني ان هذا المتغير موجود في ملف آخر.
و بعد ذلك تستطيع التعامل مع ag ..
طبعا على فرض ان الملفين هم في نفس المشروع.
زين, لو فرضنا ان لديك عشر متغيرات داخل ملف a.cpp و تريد ان تستخدم هذه المتغيرات في عدة ملفات و ليس فقط في b.cpp, فهل ستكتب في كل ملف extern .... عشر مرات؟
تستطيع اختصار الوقت و عمل ملف اسمه مثلا a.h و تكتب فيه كل الـ extern و بعدين تقوم بعمل include على a.h
مثلا:
a.cpp:
int a; int b; int c; int d;
a.h:
extern int a; extern int b; extern int c; extern int d;
b.cpp:
#include "a.h" .... a = 10; //access the global a variable ...
c.cpp:
#include "a.h" //again c.cpp has access to the global variables defined in a.cpp
وهذه شرح للفكرة كتبته في موضوع سابق ;)
b.m.s كتب:اخوي سلامة_2005الكموبايلر يترجم ملفات cpp. ولا يترجم ملفات h. (( طيب هذه ملعومات قديمة :wacko: اصبر شوي ))
لما يجي يترجم الكموبايلر ملفات cpp. يترجم كل ملف لوحدة بشكل منفصل يعني بالعربي كل ملف ينتج منه
ملف object .
طبعا كل ملف obj. له متغيراته ودواله الخاصة به .
طيب نجي الحين للشغل المهم :D .
في عملية الربط بين ملفات obj. يوجد نوعان من الربط
1) ربط داخلي 2) ربط خارجي
الربط الدخلي يتم بين الدوال والمتغيرات اللي في نفس الملف
اما الربط الخارجي يتم بين الدوال والمتغيرات العمومية اللي في الملفات الأخرى
يعني أنت استدعيت دالة وتعريفها في ملف آخر مثال عليها دوال المكتبات تستخدمها في برنامجك رغم ان تعريفها
موجود في ملفات آخر .
طيب اذا كان كل ملف يترجم لوحده بدون ما يعرف محتويات الملفات الآخرى اذا كنت أبي استخدم دالة معرفة في ملف
آخر كيف استخدمها ؟ يعني هل توجد طريقة تخبر الكومبايلر ان هذه الدالة ليست في الملف نفسه حتى لا يعطيني رسالة خطأ ؟
نعم توجد طريقة وهذه الطريقة هي باستخدام الكلمة extern .
هذه الكلمة تخبر الكومبايلر انه توجد دالة او متغير عمومي في ملف آخر يجب ان تضمنها
والخطأ الذي وقعت فيه أنت انك اخبرت الكومبايلر انه يوجد متغير اسمه Result من نوع unsigned int
لكن في مرحلة الربط لم يجد الرابط ( linker) هذا المتغير لم يتم تعريفه اصلا لأنه يوجد فرق ما بين
unsigned int Result;وهذا يتعبر تعريف وبين
extern unsigned int Result;وهذا يعتبر تصريح
وتستطيع أن تقول مثلاً
unsigned int Result; extern unsigned int Result; extern unsigned int Result; extern unsigned int Result;لكن لا تستطيع أن تقول
unsigned int Result; unsigned int Result;واتمنى اني وضحت الغموض اللي في المشكلة لك وللأستاذ الشمري وأي استفسار أنا حاظر
والله الموفق :D
وهذا رد العضو لي وهو رده قد يعتبر مفيد
سلامة_2005 كتب:شكراً لك أخي b.m.sلم اعرف بان المتغيرات العامة يجب ان نتعامل معها مثل الدوال
من حيث التصريح والأعلان
اذاً يجب ان استخدم ملف رأسي يحتوي على التصريح بالمتفير العام مثلاً global.h
extern unsigned int Result;
وملف سورس كود يحتوي على الاعلان عن المتغير العام مثلاً global.cpp
unsigned int Result;
شكراً لكم جميعاً
وهذا الرابط للموضوع السابق
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…