Avatar ·

ما الفرق بين الإعلان (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)؟ اشرح لي، من فضلك، بطريقة مبسطة مع أمثلة حتى لا أخلط بعد الآن. <<>>

الفرق الرئيسي: الإعلان يخبر المترجم أن "شيئًا ما موجود"، بينما التعريف يخبره "هذا هو شكله"

الفرق بين الإعلان