وحدة الترجمة (البرمجة)
في مصطلحات لغتي البرمجة C و C++ ، تُعدّ وحدة الترجمة (أو وحدة التجميع ) المدخل النهائي لمترجم C أو C++ الذي يُنتج منه ملف الكائن . [ 1 ] تتكون وحدة الترجمة تقريبًا من ملف المصدر بعد معالجته بواسطة معالج C المسبق ، ما يعني تضمين ملفات الرأس المذكورة في #includeالتوجيهات ، وأجزاء من التعليمات البرمجية ، وتوسيع وحدات الماكرو. يتألف نموذج C++ أيضًا من وحدة ترجمة واحدة، ولكن بينما تُوسّع التوجيهات في النموذج ، لا تُوسّع العبارات.#ifndef#includeimport
سياق
يتكون برنامج AC من وحدات تُسمى ملفات المصدر (أو ملفات المعالجة المسبقة )، والتي تتضمن، بالإضافة إلى شفرة المصدر، توجيهات لمعالج C المسبق . وحدة الترجمة هي ناتج معالج C المسبق - ملف مصدر بعد معالجته مسبقًا .
تتضمن المعالجة المسبقة بشكل أساسي توسيع ملف المصدر لاستبدال جميع #includeالتوجيهات بشكل متكرر بالملف الحرفي المُعلن عنه في التوجيه (عادةً ملفات الرأس ، ولكن قد تكون ملفات مصدر أخرى)؛ وتكون نتيجة هذه الخطوة وحدة ترجمة للمعالجة المسبقة . تشمل الخطوات اللاحقة توسيع التوجيهات على مستوى الماكرو ، #defineوالترجمة الشرطية للتوجيهات #ifdef، من بين أمور أخرى؛ وهذا يترجم وحدة ترجمة المعالجة المسبقة إلى وحدة ترجمة . من وحدة الترجمة، يُنشئ المُترجم ملف كائن ، والذي يمكن معالجته وربطه ( ربما مع ملفات كائن أخرى) لتكوين برنامج قابل للتنفيذ .
تجدر الإشارة إلى أن المعالج المسبق، من حيث المبدأ، مستقل عن لغة البرمجة، وهو معالج مسبق معجمي يعمل على مستوى التحليل المعجمي - فهو لا يقوم بالتحليل النحوي، وبالتالي لا يمكنه إجراء أي معالجة خاصة ببنية لغة C. المدخل إلى المترجم هو وحدة الترجمة، ولذلك لا يرى أي توجيهات للمعالج المسبق، والتي تتم معالجتها جميعًا قبل بدء عملية الترجمة. مع أن وحدة الترجمة تعتمد أساسًا على ملف، إلا أن شفرة المصدر الفعلية المُدخلة إلى المترجم قد تبدو مختلفة اختلافًا كبيرًا عن ملف المصدر الذي يراه المبرمج، لا سيما بسبب التضمين المتكرر للرؤوس.
نِطَاق
تحدد وحدات الترجمة نطاقًا ، وهو تقريبًا نطاق الملف ، وتعمل بشكل مشابه لنطاق الوحدة النمطية ؛ في مصطلحات لغة C، يُشار إلى هذا باسم الربط الداخلي ، وهو أحد شكلي الربط في لغة C. قد تكون الأسماء (الدوال والمتغيرات) المعلنة خارج كتلة الدالة مرئية إما داخل وحدة ترجمة معينة فقط، وفي هذه الحالة يقال إن لها ربطًا داخليًا - فهي غير مرئية للرابط - أو قد تكون مرئية لملفات الكائنات الأخرى، وفي هذه الحالة يقال إن لها ربطًا خارجيًا ، وهي مرئية للرابط.
لا يوجد في لغة C مفهوم الوحدات النمطية. ومع ذلك، فإن ملفات الكائنات المنفصلة (وبالتالي وحدات الترجمة المستخدمة لإنتاج ملفات الكائنات) تعمل بشكل مشابه للوحدات النمطية المنفصلة، وإذا لم يتضمن ملف المصدر ملفات مصدر أخرى، فيمكن اعتبار الربط الداخلي (نطاق وحدة الترجمة) بمثابة "نطاق الملف، بما في ذلك جميع ملفات الرأس".
إذا تم تقسيم وحدة C++ إلى واجهة وتنفيذ، فإن وحدة الترجمة الخاصة بها تتكون من كليهما. كما تشمل وحدة ترجمة الوحدة جميع أقسامها.
تنظيم الكود
يُخزَّن الجزء الأكبر من كود المشروع عادةً في ملفات ذات .cلاحقة .co.uk (أو .co.uk .cpp، .cxxأو .cc.co.uk للغة C++ ، حيث .cppتُستخدم اللاحقة .co.uk بشكل شائع). أما بالنسبة لوحدات C++ ، فتكون الامتدادات .cppm.co.uk .ixxأو .co.uk أو .mxx.co.uk (حيث تُعدّ اللاحقة .co.uk .cppmأو .co.uk الأكثر شيوعًا .ixx). عادةً ما تحمل الملفات المُراد تضمينها .hلاحقة .co.uk ( .hppأو .hh.co.uk تُستخدم أيضًا للغة C++، ولكن .h.co.uk هي الأكثر شيوعًا حتى في C++)، ولا تحتوي عمومًا على تعريفات للدوال أو المتغيرات لتجنب تعارض الأسماء عند تضمين ملفات الرأس في ملفات مصدر متعددة، كما هو الحال غالبًا. يمكن تضمين ملفات الرأس، وكثيرًا ما يتم ذلك، في ملفات رأس أخرى. ومن الممارسات الشائعة أن .cتتضمن جميع ملفات المشروع .hملف رأس واحد على الأقل.
انظر أيضاً
مراجع
- لغة البرمجة سي
- بناء المترجم
