القائمة الرئيسية

الصفحات

C - Storage Classes / فئات الخزين

 

تحدد فئة التخزين نطاق (الرؤية) وفترة حياة المتغيرات و / أو الوظائف داخل برنامج C. إنها تسبق النوع الذي تعدله. لدينا أربع فئات تخزين مختلفة في برنامج C -

  • تلقاءي
  • تسجيل
  • ثابتة
  • خارجي

فئة التخزين التلقائي

في السيارات فئة تخزين هي فئة تخزين افتراضية لجميع المتغيرات المحلية.

{
   int mount;
   auto int month;
}

يحدد المثال أعلاه متغيرين في نفس فئة التخزين. يمكن استخدام "auto" فقط داخل الوظائف ، أي المتغيرات المحلية.

فئة التخزين التسجيل

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

{
   register int  miles;
}

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

فئة التخزين الثابت

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

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

في البرمجة بلغة C ، عندما يتم استخدام static في متغير عام ، فإنه يتسبب في مشاركة نسخة واحدة فقط من هذا العضو من قبل جميع كائنات فئته.


#include <stdio.h>
 
/* function declaration */
void func(void);
 
static int count = 5; /* global variable */
 
main() {

   while(count--) {
      func();
   }
	
   return 0;
}

/* function definition */
void func( void ) {

   static int i = 5; /* local static variable */
   i++;

   printf("i is %d and count is %d\n", i, count);
}

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

فئة التخزين الخارجية

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

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

يتم استخدام المعدّل الخارجي بشكل شائع عندما يكون هناك ملفان أو أكثر يشتركان في نفس المتغيرات أو الوظائف العامة كما هو موضح أدناه.

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

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

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

#include <stdio.h>
 
extern int count;
 
void write_extern(void) {
   printf("count is %d\n", count);
}

هنا ، يتم استخدام extern للإعلان عن العدد في الملف الثاني ، حيث تم تعريفه في الملف الأول main.c. الآن ، قم بتجميع هذين الملفين على النحو التالي -

$gcc main.c support.c

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

count is 5
هل اعجبك الموضوع :

تعليقات