ما الفرق بين الإعلان (declaration) والتعريف (definition) في C++؟
مرحبًا! لقد بدأت مؤخرًا في تعلم لغة C++ وأخلط باستمرار بين مصطلحي "declaration" و "definition". يبدوان متشابهين، لكن المترجم (compiler) يشتكي من أشياء مختلفة.
إليك مثال أربكني. كتبت هذا الكود:
```cpp
#include
int x; // هل هذا إعلان أم تعريف؟
extern int y; // وهل هذا؟
void foo(); // وماذا عن هذا؟
int main() {
std::cout << x;
return 0;
}
void foo() {
// بعض التنفيذ
}
```
إذا أزلت `void foo() { ... }` وتركت فقط `void foo();`، فسيصدر المترجم خطأ في الربط (linker error). لكن إذا كتبت `int x;` بدون `extern`، فكل شيء يعمل. لماذا؟ في أي الحالات يكون `int x;` إعلانًا، وفي أي الحالات يكون تعريفًا؟ وما هي قاعدة ODR (One Definition Rule)؟ اشرح لي، من فضلك، بطريقة مبسطة مع أمثلة حتى لا أخلط بعد الآن.
<<>>
الفرق الرئيسي: الإعلان يخبر المترجم أن "شيئًا ما موجود"، بينما التعريف يخبره "هذا هو شكله"
الفرق بين الإعلان