0Pricing
C Academy · درس

ترجمة ملفات متعددة

أنشئ برنامجًا مكوّنًا من عدة ملفات

ترجمة ملفات متعددة درس مجاني في C Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

من المصدر إلى البرنامج

يتم تحويل مصدر C متعدد الملفات إلى ملف تنفيذي على مرحلتين: الترجمة والربط.

يُترجم كل ملف .c بشكل منفصل إلى ملف كائن. ثم يجمع الرابط جميع ملفات الكائنات، ويحل المراجع بينها، في برنامج واحد قابل للتشغيل.

البناء بأمر واحد

تتمثل أبسط طريقة في تمرير جميع ملفات المصدر إلى gcc دفعة واحدة. إذ يترجم المصرّف كل ملف ثم يربطها تلقائيًا.

تحدد الراية -o اسم البرنامج الناتج. أدرجوا جميع ملفات .c؛ إذ تُضمَّن ملفات الترويسة عبر #include ولا تُدرج هنا.

gcc main.c math_utils.c -o app

الترجمة المنفصلة

في المشاريع الأكبر، ترجموا كل ملف إلى ملف كائن باستخدام -c. ينتج عن ذلك ملف .o ولا يتم الربط.

تعني الترجمة المنفصلة أن تغيير ملف مصدر واحد لا يتطلب إلا إعادة ترجمة ذلك الملف، مما يسرّع عمليات البناء الكبيرة.

gcc -c main.c        /* produces main.o */
gcc -c math_utils.c  /* produces math_utils.o */

خطوة الربط

بعد الحصول على ملفات الكائنات، اربطوها في ملف تنفيذي. يعمل gcc هنا بصفته الرابط، فيجمع الكائنات ويحل الرموز الممتدة بين الملفات.

لا تستخدموا -c هذه المرة، لأننا نريد برنامجًا نهائيًا لا ملف كائن آخر.

gcc main.o math_utils.o -o app

ما الذي يفعله الرابط

يطابق الرابط كل استخدام لرمز مع تعريفه.

عندما يستدعي main.o الدالة add، يجد الرابط الدالة add المعرّفة في math_utils.o ويربط بينهما. كما يضمّن كود المكتبة القياسية الذي يحتاج إليه البرنامج.

أخطاء المرجع غير المعرّف

إذا نسيتم ملف كائن عند الربط، فلن يتمكن الرابط من العثور على تعريف، ويُبلغ عن مرجع غير معرّف.

هذا خطأ يحدث وقت الربط، وليس خطأ ترجمة: فقد تُرجم كل ملف بنجاح، لكن تعريفًا مطلوبًا كان مفقودًا من الأمر النهائي.

gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */

رايات التحذير المفيدة

ترجموا دائمًا مع تفعيل التحذيرات. تكشف -Wall و-Wextra الأخطاء المحتملة مبكرًا.

يحدد استخدام -std=c11 معيار اللغة، مما يجعل السلوك متوقعًا بين المصرّفات المختلفة. وتعمل هذه الرايات سواء ترجمتم في خطوة واحدة أو بشكل منفصل.

gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o app

مسارات التضمين

عندما تكون ملفات الترويسة في دليل آخر، أخبروا المصرّف بمكان البحث باستخدام -I.

فمثلًا، يضيف -Iinclude مجلد include/ إلى مسار البحث، بحيث يُحل #include "math_utils.h" حتى من مجلد مختلف.

gcc -Iinclude -c src/main.c -o build/main.o

أهمية إعادة الترجمة

تتألق الترجمة المنفصلة عندما يتغير ملف واحد فقط. فأعيدوا ترجمة كائن ذلك الملف، ثم أعيدوا الربط.

أما إذا عدّلتم ملف ترويسة، فيجب إعادة ترجمة كل مصدر يضمّنه، لأن نص الترويسة يصبح جزءًا من كل ملف منها.

/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o app

الأتمتة باستخدام make

تصبح كتابة الأوامر يدويًا مملة. يسجل Makefile القواعد ويعيد بناء ما تغيّر فقط.

يربط هذا المثال المختصر كائنين في app؛ ويتتبع make طوابع وقت الملفات ليقرر ما يحتاج إلى إعادة ترجمة.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

مراجعة عملية البناء كاملة

إليكم سير العمل كاملًا لمشروع صغير، بدءًا من ملفات الكائنات ووصولًا إلى برنامج مكتمل مع تفعيل التحذيرات.

ترجموا كل مصدر، ثم اربطوا ملفات الكائنات. شغّلوا الناتج للتأكد من عمله من البداية إلى النهاية.

gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./app

تحقق سريع

تحققوا من فهمكم لعملية بناء البرامج متعددة الملفات.

مراجعة

تعلمتم ترجمة كل ملف .c إلى ملف كائن باستخدام -c، ثم ربط ملفات الكائنات في برنامج. استخدموا -Wall و-I للتحذيرات ومسارات التضمين.

تعني المراجع غير المعرّفة وجود ملف كائن مفقود وقت الربط. وتؤتمت أدوات مثل make إعادة بناء ما تغيّر فقط.

الأسئلة الشائعة

هل درس «ترجمة ملفات متعددة» مجاني؟

نعم — نص درس «ترجمة ملفات متعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «ترجمة ملفات متعددة»؟

أنشئ برنامجًا مكوّنًا من عدة ملفات تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «ترجمة ملفات متعددة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ملفات الترويسة والمصدر
  2. حواجز التضمين
  3. extern والربط
  4. ترجمة ملفات متعددة
← العودة إلى C Academy