Menu
CoddyTech

حواجز التضمين

جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 2 من 61.

عند تضمين ملف ترويسة عدة مرات في مشروع، يرى المترجم التصريحات نفسها مرارًا، مما يسبب أخطاء. يحدث هذا عادةً عندما تتضمن ملفات متعددة ملف الترويسة نفسه، أو عندما تتضمن ملفات الترويسة بعضها بعضًا. تحل حواجز التضمين هذه المشكلة.

يستخدم واقي التضمين ثلاثة توجيهات للمعالج المسبق لضمان معالجة محتويات ملف الترويسة مرة واحدة فقط:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

إليك كيفية عمل ذلك: يتحقق #ifndef MATH_UTILS_H مما إذا كان الرمز MATH_UTILS_H لم يُعرَّف بعد. إذا لم يكن قد عُرِّف، تتابع المعالجة المسبقة وتعرّفه فورًا باستخدام #define MATH_UTILS_H. يُضمَّن كل ما بين هذه النقطة و#endif في عملية الترجمة.

في المرة الثانية التي يُضمَّن فيها هذا الملف الترويـسي، يكون MATH_UTILS_H معرّفًا بالفعل، لذلك يتم تخطي الكتلة بأكملها. عادةً ما يكون اسم الحارس هو اسم الملف بأحرف كبيرة، مع استبدال النقاط والمحارف الخاصة بشرطات سفلية.

يجب أن يحتوي كل ملف ترويسة تنشئه على حواجز تضمين. هذه ممارسة قياسية تمنع أخطاء الترجمة وتجعل تضمين شيفرتك آمنًا من أي مكان في مشروعك.

challenge icon

التحدي

سهل

لنحمِ ملف ترويسة من التضمين المتكرر بإضافة حواجز التضمين. ستبني على أداة التحية من الدرس السابق، لكن هذه المرة تأكد من أن الترويسة آمنة عند تضمينها عدة مرات.

ستنشئ ملفين:

  • greet.h: ملف الترويسة الذي يحتوي على تصريح الدالة greet. هذه المرة، أَحِط المحتويات كاملةً بحواجز التضمين باستخدام الرمز GREET_H.
  • main.c: ملفك الرئيسي الذي يضمّن الترويسة، وينفّذ الدالة greet، ويستدعيها من main().

يجب أن تقبل الدالة greet مُعاملًا من النوع const char* للاسم وأن تطبع:

Hello, Alice!

يجب أن يتبع ملف الترويسة هذا الهيكل:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

ستتلقى مُدخلًا واحدًا: اسمًا (سلسلة نصية).

اطبع رسالة التحية تمامًا كما هو موضح في التنسيق أعلاه، مع استبدال Alice بالاسم المُعطى.

جرّب بنفسك

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

// TODO: نفّذ الدالة greet التي تطبع "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: استدعِ الدالة greet مع الاسم
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C عبر الإنترنت