ما الفرق بين 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;` مرتين، فكل شيء يعمل. أرجو شرح كيفية عمل ذلك بكلمات بسيطة مع أمثلة. شكراً مسبقاً!