0Pricing
C Academy · درس

ملفات الترويسة والمصدر

افصل التصريحات عن الشيفرة

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

لماذا نقسم الشيفرة إلى ملفات؟

مع نمو برامج C، يصبح الاحتفاظ بكل شيء في ملف .c واحد صعب القراءة وبطيئًا في الترجمة.

تتيح لك C تقسيم المشروع إلى عدة ملفات، يتولى كل منها مهمة واحدة. يحسّن ذلك التنظيم، ويتيح إعادة استخدام الشيفرة، ويعني أن تغيير جزء واحد لا يفرض إعادة ترجمة كل شيء.

نوعا الملفات

يستخدم مشروع C المعياري نوعين من الملفات.

تحتوي ملفات المصدر (.c) على التنفيذ الفعلي: أجسام الدوال وتعريفاتها.

تحتوي ملفات الترويسات (.h) على التصريحات: نماذج الدوال، وتعريفات الأنواع، والماكروهات التي تحتاج الملفات الأخرى إلى معرفتها.

ملف الترويسة

تصرّح الترويسة بما هو موجود من دون أن تشرح كيف يعمل.

تصرّح math_utils.h هنا بدالة add. ويتعرّف أي ملف يضمّن هذه الترويسة على توقيع الدالة، ويمكنه استدعاؤها.

/* math_utils.h */
int add(int a, int b);

ملف المصدر المطابق

يوفّر ملف المصدر التنفيذ. وهو يضمّن ترويسته الخاصة حتى يتمكن المصرّف من التحقق من تطابق التعريف مع التصريح.

لاحظ أن الترويسة مضمّنة باستخدام علامتي الاقتباس، وهو الأسلوب المستخدم لملفات مشروعك الخاصة.

/* math_utils.c */
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}

استخدام الوحدة

يضمّن main.c الآن الترويسة ويستدعي add. ولا يرى جسم الدالة قط، بل النموذج الأولي فقط.

يثق المصرّف بالتصريح، ثم يربط الرابط الاستدعاء لاحقًا بالتنفيذ الفعلي في math_utils.c.

/* main.c */
#include <stdio.h>
#include "math_utils.h"

int main(void) {
    printf("%d\n", add(2, 3));
    return 0;
}

علامتا الاقتباس مقابل الأقواس الزاوية

لتوجيه #include صيغتان.

يستخدم #include <stdio.h> الأقواس الزاوية لترويسات النظام والمكتبة القياسية. ويبحث المصرّف في مسارات التضمين القياسية.

يستخدم #include "math_utils.h" علامتي الاقتباس لترويساتك الخاصة، ويبحث عنها أولًا في الدليل الحالي.

#include <stdio.h>      /* standard library */
#include "math_utils.h" /* your project */

ما يوضع في الترويسة

ضع التصريحات في الترويسات، لا التعريفات.

من محتويات الترويسة المناسبة: نماذج الدوال، وتصريحات struct وtypedef، وماكروهات #define، وتصريحات المتغيرات extern.

تجنب وضع أجسام الدوال أو تعريفات المتغيرات فيها، لأن ذلك قد يسبب أخطاء الرموز المكررة.

/* shapes.h */
typedef struct {
    double width;
    double height;
} Rect;

double rect_area(Rect r);

ما يوضع في ملف المصدر

يحتوي ملف المصدر على العمل الفعلي: تعريفات الدوال والمساعدات الخاصة بالملف.

وهو يضمّن الترويسة المطابقة حتى يتحقق المصرّف من توافق التواقيع. ويكشف ذلك حالات عدم التطابق مبكرًا بدلًا من اكتشافها وقت الربط.

/* shapes.c */
#include "shapes.h"

double rect_area(Rect r) {
    return r.width * r.height;
}

التصريح مقابل التعريف

يمثّل هذا الفرق أساس البرمجة المعيارية في C.

يخبر التصريح المصرّف بنوع الاسم وتوقيعه حتى يمكن استخدامه: int add(int, int);

ينشئ التعريف الكيان الفعلي، إذ يخصص مساحة تخزين أو يوفّر جسم الدالة. تصرّح الترويسات، وتعرّف ملفات المصدر.

int add(int a, int b);          /* declaration */
int add(int a, int b) {         /* definition */
    return a + b;
}

اصطلاحات التسمية

من الأنماط الشائعة مطابقة كل وحدة باسمها: logger.h مع logger.c، وparser.h مع parser.c.

يوضح ذلك مكان وجود التنفيذ. اجمع الدوال المرتبطة في وحدة واحدة، بحيث تكون لكل ملف مسؤولية واحدة واضحة.

/* logger.h */
void log_info(const char *msg);
void log_error(const char *msg);

صورة عن عملية البناء

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

لا تُترجم الترويسات بمفردها؛ بل تُدرج نصيًا في ملفات المصدر التي تضمّنها. وسنستكشف سير عملية البناء بالكامل في درس لاحق.

gcc -c main.c        /* -> main.o */
gcc -c math_utils.c  /* -> math_utils.o */
gcc main.o math_utils.o -o app

تحقق سريع

اختبر مدى فهمك لأدوار الترويسات وملفات المصدر.

مراجعة

تعلمت تقسيم مشروع C إلى ترويسات .h وملفات مصدر .c.

تصرّح الترويسات بما هو موجود، بينما تعرّف ملفات المصدر كيفية عمله. استخدم علامتي الاقتباس لترويساتك الخاصة، والأقواس الزاوية للترويسات القياسية.

سنمنع لاحقًا المشكلات الناتجة عن تضمين الترويسة أكثر من مرة.

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

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

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

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

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

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

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

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

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

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

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

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

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