اعلان

ما هو الفرق بين #include و define؟ ما هي تعليمات include define؟

 في لغات البرمجة مثل C و C++، هناك توجيهان رئيسيان يُستخدمان لتوجيه المعالج المسبق (preprocessor): `#include` و `#define`. كل منهما له وظيفة مختلفة ويستخدم لأغراض محددة. دعنا نوضح الفرق بينهما وماهيتهما.


### 1. `#include`:


**الوظيفة:**

- تُستخدم لتضمين محتوى ملفات أخرى في ملف المصدر الحالي.

- الهدف من `#include` هو إدراج محتوى ملف خارجي (مثل ملف رأس) في مكان معين من الكود المصدر، مما يسمح بإعادة استخدام الكود وتعزيز التنظيم.


**الاستخدام:**

- تضمين ملفات الرأس (Header files) التي تحتوي على تعريفات للثوابت والدوال والفئات.

  ```c

  #include <stdio.h>  // تضمين مكتبة الإدخال/الإخراج القياسية

  #include "myheader.h" // تضمين ملف رأس مخصص

  ```


**أنواع `#include`:**

- **`#include <filename>`:** تُستخدم لتضمين ملفات المكتبة القياسية أو المكتبات التي تقع في المجلدات التي يعرفها المترجم.

- **`#include "filename"`:** تُستخدم لتضمين ملفات رأس مخصصة. يُفترض أن يتم البحث عنها في المجلدات المحلية للمشروع أولاً قبل البحث في المجلدات القياسية.


**آلية العمل:**

- عند encountering توجيه `#include`، يقوم المعالج المسبق بقراءة محتوى الملف المحدد ويقوم بإدراجه في مكان `#include` في الملف المصدر. هذا يسمح لك بكتابة كود منظم وقابل لإعادة الاستخدام.


### 2. `#define`:


**الوظيفة:**

- تُستخدم لتعريف الثوابت والماكرو (macros) التي يمكن استخدامها في جميع أنحاء البرنامج.

- الهدف من `#define` هو تعريف رموز يمكن استبدالها في وقت التحليل المسبق، مما يجعل الكود أكثر مرونة وتنظيمًا.


**الاستخدام:**

- **تعريف الثوابت:** 

  ```c

  #define PI 3.14159

  ```

- **تعريف الماكرو:**

  ```c

  #define SQUARE(x) ((x) * (x))

  ```


**آلية العمل:**

- عند encountering توجيه `#define`, يقوم المعالج المسبق بالبحث عن جميع التكرارات للرمز المُعرف واستبدالها بالقيمة أو الكود المحدد. على سبيل المثال، في حالة `#define PI 3.14159`، كل ظهور لـ `PI` في الكود يتم استبداله بـ `3.14159` قبل تجميع الكود.


### مقارنة بين `#include` و `#define`:


- **الهدف:**

  - **`#include`:** إدراج محتوى من ملف آخر.

  - **`#define`:** تعريف ثوابت أو ماكرو.


- **آلية العمل:**

  - **`#include`:** يتم إدراج محتوى الملف المضمّن في الكود المصدر كما هو.

  - **`#define`:** يتم استبدال الرموز المُعرّفة بالقيم أو التعبيرات المحددة قبل عملية التجميع.


- **الاستخدام:**

  - **`#include`:** لتضمين تعريفات الدوال، الثوابت، الفئات، وما إلى ذلك من ملفات الرأس.

  - **`#define`:** لتعريف الثوابت والقيم التي يمكن استخدامها في الكود وفي إنشاء الماكرو لتعريف تعبيرات يمكن استخدامها في أماكن متعددة.


### تعليمات `#include` و `#define`:


- **`#include`**:

  - **`#include <filename>`**: لتضمين ملفات المكتبة القياسية.

  - **`#include "filename"`**: لتضمين ملفات رأس مخصصة.


- **`#define`**:

  - **`#define NAME value`**: لتعريف ثابت.

  - **`#define NAME(parameters) expression`**: لتعريف ماكرو.


باختصار، `#include` يُستخدم لإدراج محتوى ملفات أخرى لزيادة تنظيم الكود وإعادة استخدامه، بينما `#define` يُستخدم لتعريف ثوابت وماكرو لزيادة مرونة الكود وتبسيط التعبيرات البرمجية.

مقالات ذات صلة

تعليقات