Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملفات المصدر

جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 3 من 61.

حتى الآن، قمنا بوضع تصريحات الدوال (function declarations) في ملفات الترويسة (header files)، لكن كود الدالة الفعلي (التعريف - definition) كان موجوداً في الملف الرئيسي (main file). الخطوة التالية في البرمجة التركيبية (modular programming) هي نقل تلك التعريفات إلى ملفات المصدر (.c files) الخاصة بها.

يؤدي هذا إلى إنشاء هيكل نظيف مكون من ثلاثة أجزاء: يقوم ملف الترويسة (header) بالتصريح عن الدوال، ويقوم ملف مصدر منفصل بتعريفها، وتقوم الدالة main ببساطة باستخدامها. إليك كيف يبدو الأمر:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

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

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

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

لاحظ أن math_utils.c يتضمن ملف الترويسة (header) الخاص به. يضمن ذلك تطابق تعريف الدالة مع التصريح عنها—وإذا لم يتطابقا، فسيقوم المترجم (compiler) باكتشاف الخطأ. يحتاج الملف الرئيسي فقط إلى تضمين ملف الترويسة لاستخدام الدالة؛ ولا يحتاج إلى معرفة كيفية عمل add داخلياً.

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

challenge icon

التحدي

سهل

لنقم ببناء أداة رياضية بسيطة من خلال تنظيم الكود الخاص بك في هيكل مكون من ثلاثة ملفات: ملف رأس (header) للإعلانات، وملف مصدر (source) للتنفيذات، وملف رئيسي (main) يستخدمهما.

ستقوم بإنشاء ثلاثة ملفات:

  • math_ops.h: ملف الرأس الخاص بك الذي يحتوي على إعلانات الدوال لعمليتين: multiply و subtract. تأخذ كلتا الدالتين عددين صحيحين وتعيدان عدداً صحيحاً. لا تنسَ تضمين الحماية (guards) باستخدام الرمز MATH_OPS_H.
  • math_ops.c: ملف المصدر الخاص بك الذي يحتوي على التنفيذات الفعلية لـ multiply و subtract. يجب أن يتضمن هذا الملف ملف الرأس الخاص به لضمان تطابق الإعلانات مع التعريفات.
  • main.c: ملفك الرئيسي الذي يتضمن ملف الرأس ويستخدم كلتا الدالتين لإجراء الحسابات.

يجب أن تعيد الدالة multiply حاصل ضرب عددين صحيحين، ويجب أن تعيد subtract العدد الصحيح الأول مطروحاً منه الثاني.

ستتلقى مدخلين من نوع عدد صحيح: a و b.

في الدالة الرئيسية (main)، قم بطباعة نتائج كلتا العمليتين في سطرين منفصلين:

Product: {result of multiply}
Difference: {result of subtract}

على سبيل المثال، مع المدخلات 8 و 3، سيكون الناتج:

Product: 24
Difference: 5

ورقة مرجعية

يمكن نقل تعريفات الدوال من الملف الرئيسي إلى ملفات مصدر منفصلة (ملفات .c)، مما يؤدي إلى إنشاء هيكل معياري مكون من ثلاثة أجزاء:

  • ملف الرأس (.h): يحتوي على تصريحات الدوال
  • ملف المصدر (.c): يحتوي على تعريفات الدوال
  • الملف الرئيسي (main.c): يستخدم الدوال

هيكل مثال:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

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

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

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

يجب أن يتضمن ملف المصدر (.c) ملف الرأس الخاص به للتأكد من أن تعريف الدالة يطابق التصريح. يحتاج الملف الرئيسي فقط إلى تضمين ملف الرأس لاستخدام الدوال، مما يحافظ على إخفاء تفاصيل التنفيذ.

جرّب بنفسك

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: استدعِ الدالة multiply مع a و b، وقم بتخزين النتيجة
    
    // TODO: استدعِ الدالة subtract مع a و b، وقم بتخزين النتيجة
    
    // TODO: اطبع النتائج بالتنسيق التالي:
    // Product: {result of multiply}
    // Difference: {result of subtract}
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming