English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل الأساسيات C لغة البرمجة

تحكم في تدفق C لغة البرمجة

الوظائف في لغة C

المسافات في لغة C

المراجع في لغة C

الخطوط في لغة C

مباني C لغة البرمجة

ملفات C لغة البرمجة

C أخرى

دليل C لغة البرمجة

ملفات الرأس (header files) في لغة C

ملفات الرؤوس هي امتدادها .h الملف، الذي يحتوي على إعلانات الدوال والمكتبات، ويتم استدعاؤه من قبل ملفات المصدر المختلفة. هناك نوعان من ملفات الرؤوس: ملفات الرؤوس التي يكتبها المبرمجون وملفات الرؤوس التي يقدمها معالج التجميع.

للإستخدام ملفات الرؤوس في البرنامج، يجب استخدام أوامر معالج التجميع C #include للاستدعاء. لقد شاهدنا من قبل stdio.h ملفات الرؤوس، وهي ملفات الرؤوس التي يقدمها معالج التجميع.

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

تطبيق بسيط في C أو C++ البرمجيات، يُنصح بوضع جميع المعلمات الثابتة والمكتبات والمتغيرات العالمية للنظام والنماذج البرمجية في ملفات الرؤوس، واستدعاء هذه الملفات عند الحاجة.

引用头文件的语法

نص استدلال ملف الرأس #include استخدام تعليمات المعالج المسبق

يمكن استدلال على ملفات الرأس المخصصة والنظامية. تتضمن أشكالها كما يلي:

#include <file>

يستخدم هذا الشكل لاستدلال ملفات الرأس النظامية. يبحث المسبق المعالج في القائمة المعيارية للدلائل النظامية عن الملف المسمى file. يمكنك وضع الدليل في مقدمة القائمة باستخدام خيار -I عند تجميع الكود.

#include "file"

يستخدم هذا الشكل لاستدلال ملفات الرأس المخصصة. يبحث المسبق المعالج في الدليل الحالي للملف المسمى file. يمكنك وضع الدليل في مقدمة القائمة باستخدام خيار -I عند تجميع الكود.

#include عمليات استدلال ملف الرأس #include التعليمات ستجعل مسبق المعالج يتصفح الملف المحدد كإدخال. تتضمن输ود المسبق المعالج الناتج المُنتج، الناتج المُنتج من الملف المُدرج، والـ

char *test(void);

وبرنامج رئيسي يستخدم ملف الرأس program.c، مثلما هو موضح أدناه:

int x;
#include "header.h"
int main(void)
{
   puts(test());
}

سيشاهد المعالج التجميع المعلومات التالية للكود:

int x;
char *test(void);
int main(void)
{
   puts(test());
}

استدلال ملف الرأس مرة واحدة فقط

إذا تم استدلال ملف الرأس مرتين، سيقوم المعالج بتشغيل محتوى الملف مرتين، مما يؤدي إلى خطأ. لمنع هذا، يتم عادة وضع محتوى الملف كله داخل جملة التجميع المشروطة، مثلما هو موضح أدناه:

#ifndef HEADER_FILE
#define HEADER_FILE
الكامل ملف الرأس ملف
#endif

هذه الهيكلية هي ما يُسمى عادة بالطرف المساعد #ifndefعندما يتم تكرار الاستدلال على ملف الرأس مرة أخرى، تكون الشروط خطأ لأن HEADER_FILE تم تعريفه. في هذه الحالة، سيقوم المسبق المعالج بتجاوز محتوى الملف كله، وسيقوم معالج التجميع بتجاهل ذلك.

الاستدلال المشروط

في بعض الأحيان، قد تحتاج إلى اختيار ملف رأس من عدة ملفات رأس مختلفة لإدراجه في البرنامج. على سبيل المثال، قد تحتاج إلى تحديد معلمات التكوين المختلفة للنظام على مختلف أنظمة التشغيل. يمكنك تحقيق ذلك من خلال سلسلة من الشروط، مثلما هو موضح أدناه:

#if SYSTEM_1
   # include "system_1.h"
#elif SYSTEM_2
   # include "system_2.h"
#elif SYSTEM_3
   ...
#endif

لكن عندما يكون هناك الكثير من ملفات الرأس، هذا السلوك غير مناسب، يستخدم المسبق المعالج الماكرو لتعريف اسم ملف الرأس. هذا هو ما يُسمى بـالاستدلال المشروطليس باستخدام اسم ملف الرأس كـ #include المعادلة المباشرة، يجب عليك فقط استخدام اسم الماكرو بدلاً من ذلك:

 #define SYSTEM_H "system_1.h"
 ...
 #include SYSTEM_H

سيتم توسيع SYSTEM_H، وسيبحث المعالج المسبق عن system_1.h، مثل #include كما تم كتابته في البداية. يمكن تعريف SYSTEM_H عبر خيار -D في Makefile الخاص بك.