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

دروس أساسية في لغة C

تحكم في العملية في لغة C

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

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

الإشارات في لغة C

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

مبادئ التركيب في لغة C

ملفات لغة C

C أخرى

دليل مرجع لغة C

فئات التخزين في لغة C

يحدد مؤشر التخزين نطاق (الإدراك) وحياة المتغير/الدالة في برنامج C. يتم وضع هذه الأسماء قبل النوع الذي يتم تعديله. يُظهر لنا لاحقًا مؤشرات التخزين المتاحة في برنامج C:

  • auto

  • register

  • static

  • extern

مؤشر التخزين auto

auto مؤشر التخزين هو مؤشر التخزين الافتراضي لجميع المتغيرات المحلية.

{
   int mount;
   auto int month;
}

يحدد مثال أعلاه متغيرين بهما نفس مؤشر التخزين، يمكن استخدام auto فقط داخل الدالة، أي يمكن استخدام auto فقط لتعديل متغيرات محلية.

مؤشر التخزين register

register يستخدم مؤشر التخزين لتحديد المتغيرات المحلية التي يتم تخزينها في المسجل بدلاً من RAM. هذا يعني أن حجم المتغير أقصاه يساوي حجم المسجل (عادة كلمة واحدة)، ولا يمكن تطبيق عمليات الحساب الحسابية على المتغير (بما في ذلك عمليات الحساب الحسابية) لأنه ليس له موقع في الذاكرة.

{
   register int miles;
}

يستخدم المسجل فقط للعناصر التي تحتاج إلى الوصول السريع، مثل المعتمد. يجب أيضًا ملاحظة أن تعريف 'register' لا يعني أن سيتم تخزين المتغير في المسجل، بل يعني أن المتغير قد يتم تخزينه في المسجل، اعتمادًا على التقييدات المادية والتنفيذ.

مؤشر التخزين static

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

يمكن تطبيق ميزة static أيضًا على المتغيرات العالمية. عند تطبيق static على متغير عالمي، فإن ذلك يحد من نطاق المتغير إلى ملف الإعلان.

يمكن استدعاء متغير أو طريقة static المعلن عالميًا بأي دالة أو طريقة، طالما أن هذه الدوال أو الطرق موجودة في نفس الملف الذي يحتوي على المتغير أو الطريقة static.

هذا المثال يوضح تطبيق static في تعديل متغيرات عالمية ومحلية.

#include <stdio.h>
/* إعلان الدالة */
void func1(void);
static int count = 12; /* متغير عالمي - static هو القيمة الافتراضية */
int main()
{
    while (count--) {
        func1();
    }
    return 0;
}
void func1(void);
{
    /* 'hello' هو متغير محلي لدالة 'func1' - يتم التوليد مرة واحدة فقط */
    * كل مرة يتم استدعاء الدالة 'func1' 'hello' القيمة لا يتم تعديلها.
    */
    static int hello = 4;
    hello++;
    printf("%d، count هو %d\n", hello, count);
}

يمكن استخدام count كمتغير عالمي في الدالة، hello باستخدام修饰ر static لن يتم إعادة تعيينه في كل مرة يتم استدعاؤها.

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

 hello هو 5، count هو 11
 hello هو 6، count هو 10
 hello هو 7، count هو 9
 hello هو 8، count هو 8
 hello هو 9، count هو 7
 hello هو 10، count هو 6
 hello هو 11، count هو 5
 hello هو 12، count هو 4
 hello هو 13، count هو 3
 hello هو 14، count هو 2
 hello هو 15، count هو 1
 hello هو 16، count هو 0

نوع التخزين extern

extern يستخدم نوع التخزين لتقديم استدلال على المتغير العالمي، المتغير العالمي يظهر في جميع ملفات البرنامج. عند استخدام extern عندما يكون هناك متغير غير قابلة للتحديد، سيتم توجيه اسم المتغير إلى موقع التخزين المحدد مسبقًا.

عندما يكون لديك عدة ملفات وقد قمت بتحديد متغير عالمي أو دالة يمكن استخدامها في ملفات أخرى، يمكنك استخدام extern للحصول على استدلال على المتغير أو الدالة المحددة. يمكن فهم ذلك،extern يستخدم لتحديد متغير عالمي أو دالة في ملف آخر.

استخدام修饰ر extern عادةً عندما يكون هناك أكثر من ملفين يتشاركون نفس المتغيرات العالمية أو الدوال، مثلما هو موضح أدناه:

ملف الأول: main.c

#include <stdio.h>
 
int count;
extern void write_extern();
 
int main()
{
   count = 5;
   write_extern();
}

ملف الثاني: support.c

#include <stdio.h>
 
extern int count;
 
void write_extern(void)
{
   printf("عدد الارقام هو %d\n", count);
}

في هذا المكان، ملف الثاني يحتوي على extern كلمة المفتاح extern كلمة المفتاح count تستخدم لتحديد أنها تم تعريفها بالفعل في الملف first main.cالآن، قم بتشغيل هذين الملفين، كما يلي:

 $ gcc main.c support.c

هذا سيكون له a.out برنامج قابل للتنفيذ، عندما يتم تنفيذه، سيكون له النتيجة التالية:

عدد هو 5