Avatar ·

ما الفرق بين declaration و definition في C++؟

مرحباً بالجميع! لقد بدأت للتو في تعلم لغة C++ وأشعر بالحيرة تجاه المصطلحين "declaration" و "definition". يبدو أن كلاهما مرتبط بإنشاء المتغيرات والدوال، لكنني لا أفهم الفرق الجوهري بينهما. على سبيل المثال، أكتب الكود التالي: ```cpp int x; // هل هذا declaration أم definition؟ extern int y; // وهذا؟ void foo(); // وهذا؟ void foo() { } // وهذا؟ ``` عندما أكتب `int x;` داخل دالة، يقوم المترجم بإنشاء متغير وتخصيص ذاكرة له. أما عندما أكتب `extern int y;`، فإن البرنامج لا يُترجم إذا لم أضف `int y;` في مكان آخر. لماذا يحدث ذلك؟ ما المنطق وراء ذلك؟ كما سمعت أن declaration يمكن تكراره، بينما definition لا يمكن. لكن عملياً، أحصل على خطأ "multiple definition" إذا كتبت `int x;` مرتين في النطاق العام. أما إذا كتبت `extern int x;` مرتين، فكل شيء يعمل. أرجو شرح كيفية عمل ذلك بكلمات بسيطة مع أمثلة. شكراً مسبقاً!