C में स्टोरेज क्लासेस: ऑटो, एक्सटर्न, स्टेटिक, रजिस्टर (उदाहरण)

सी भाषा में स्टोरेज क्लास क्या है?

स्टोरेज क्लास किसी वैरिएबल की दृश्यता और स्थान को दर्शाता है। यह बताता है कि कोड के किस भाग से हम वैरिएबल तक पहुँच सकते हैं। C में स्टोरेज क्लास का उपयोग निम्नलिखित चीज़ों का वर्णन करने के लिए किया जाता है:

  • परिवर्तनशील दायरा.
  • वह स्थान जहाँ चर संग्रहीत किया जाएगा.
  • किसी चर का आरंभिक मान.
  • एक चर का जीवनकाल.
  • किसी चर तक कौन पहुंच सकता है?

इस प्रकार एक भंडारण वर्ग का उपयोग किसी चर के बारे में जानकारी का प्रतिनिधित्व करने के लिए किया जाता है।

नोट: एक चर केवल एक के साथ जुड़ा हुआ नहीं है डाटा प्रकार, इसका मूल्य लेकिन यह भी एक भंडारण वर्ग है।

सी में स्टोरेज क्लासेस के प्रकार क्या हैं?

मानक स्टोरेज क्लास के कुल चार प्रकार हैं। नीचे दी गई तालिका C में स्टोरेज क्लास को दर्शाती है।

भंडारण वर्ग उद्देश्य
स्वत: यह एक डिफ़ॉल्ट भंडारण वर्ग है.
बाहरी यह एक वैश्विक चर है.
स्थिर यह एक स्थानीय चर है जो फ़ंक्शन कॉल पर नियंत्रण स्थानांतरित होने पर भी मान लौटाने में सक्षम है।
रजिस्टर यह एक वेरिएबल है जो रजिस्टर के अंदर संग्रहीत होता है।

C में ऑटो स्टोरेज क्लास

ऑटो स्टोरेज क्लास का उपयोग करके परिभाषित किए गए वेरिएबल को स्थानीय वेरिएबल कहा जाता है। ऑटो का मतलब है स्वचालित स्टोरेज क्लास। यदि कोई वेरिएबल स्पष्ट रूप से निर्दिष्ट नहीं है, तो वह डिफ़ॉल्ट रूप से ऑटो स्टोरेज क्लास में होता है।

ऑटो वैरिएबल का दायरा सिर्फ़ उस विशेष ब्लॉक तक ही सीमित होता है। एक बार जब नियंत्रण ब्लॉक से बाहर चला जाता है, तो एक्सेस नष्ट हो जाता है। इसका मतलब है कि सिर्फ़ वही ब्लॉक इसे एक्सेस कर सकता है जिसमें ऑटो वैरिएबल घोषित किया गया है।

ऑटो स्टोरेज क्लास को परिभाषित करने के लिए ऑटो कीवर्ड का उपयोग किया जाता है। डिफ़ॉल्ट रूप से, ऑटो वैरिएबल में एक कचरा मान होता है।

Example, auto int age;

नीचे दिया गया प्रोग्राम एक फ़ंक्शन को परिभाषित करता है जिसमें दो स्थानीय चर हैं

int add(void) {
   int a=13;
   auto int b=48;
return a+b;}

हम एक और प्रोग्राम लेते हैं जो प्रत्येक ब्लॉक कोड में ऑटो वेरिएबल्स के लिए स्कोप स्तर "दृश्यता स्तर" दिखाता है जो एक दूसरे से स्वतंत्र हैं:

#include <stdio.h>
int main( )
{
  auto int j = 1;
  {
    auto int j= 2;
    {
      auto int j = 3;
      printf ( " %d ", j);
    }
    printf ( "\t %d ",j);
  }
  printf( "%d\n", j);}

उत्पादन:

 3 2 1

C में एक्सटर्नल स्टोरेज क्लास

एक्सटर्न का मतलब है एक्सटर्नल स्टोरेज क्लास। एक्सटर्न स्टोरेज क्लास का उपयोग तब किया जाता है जब हमारे पास ग्लोबल फ़ंक्शन या वैरिएबल होते हैं जिन्हें दो या अधिक फ़ाइलों के बीच साझा किया जाता है।

खोजशब्द बाहरी किसी अन्य फ़ाइल में वैश्विक चर या फ़ंक्शन को घोषित करने के लिए उपयोग किया जाता है, ताकि मूल फ़ाइल में पहले से परिभाषित चर या फ़ंक्शन का संदर्भ प्रदान किया जा सके।

एक्सटर्न कीवर्ड का उपयोग करके परिभाषित किए गए वेरिएबल को ग्लोबल वेरिएबल कहा जाता है। ये वेरिएबल पूरे प्रोग्राम में एक्सेस किए जा सकते हैं। ध्यान दें कि एक्सटर्न वेरिएबल को इनिशियलाइज़ नहीं किया जा सकता है, यह पहले से ही मूल फ़ाइल में परिभाषित किया गया है।

Example, extern void display();

पहली फ़ाइल: main.c

#include <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

दूसरी फ़ाइल: original.c

#include <stdio.h>
i=48;

रिजल्ट:

 value of the external integer is = 48


उपरोक्त कोड को संकलित करने और चलाने के लिए, नीचे दिए गए चरणों का पालन करें

चरण 1) नया प्रोजेक्ट बनाएं,

  1. कंसोल अनुप्रयोग चुनें
  2. क्लिक गो

C में एक्सटर्नल स्टोरेज क्लास

चरण 2) C चुनें और अगला क्लिक करें

C में एक्सटर्नल स्टोरेज क्लास

चरण 3) अगला पर क्लिक करें

C में एक्सटर्नल स्टोरेज क्लास

चरण 4) विवरण दर्ज करें और अगला क्लिक करें

C में एक्सटर्नल स्टोरेज क्लास

चरण 5) समाप्त क्लिक करें

C में एक्सटर्नल स्टोरेज क्लास

चरण 6) पिछले प्रोग्राम में दिखाए अनुसार मुख्य कोड को main.c फ़ाइल में डालें और उसे सेव करें

C में एक्सटर्नल स्टोरेज क्लास

चरण 7) एक नई C फ़ाइल बनाएं [फ़ाइल -> नई -> खाली फ़ाइल, सहेजें (original.c के रूप में) और संवाद बॉक्स में "ओके" पर क्लिक करके इसे वर्तमान प्रोजेक्ट में जोड़ें।

C में एक्सटर्नल स्टोरेज क्लास

चरण 8) पिछले उदाहरण में दिखाए गए original.c फ़ाइल के C कोड को main() फ़ंक्शन के बिना डालें और सहेजें।

C में एक्सटर्नल स्टोरेज क्लास

चरण 9) अपना प्रोजेक्ट बनाएं और चलाएं। परिणाम अगले चित्र में दिखाया गया है

C में एक्सटर्नल स्टोरेज क्लास

C में स्थैतिक भंडारण वर्ग

स्टैटिक वैरिएबल का उपयोग फ़ंक्शन/फ़ाइल के भीतर स्थानीय स्टैटिक वैरिएबल के रूप में किया जाता है। इन्हें एक के रूप में भी इस्तेमाल किया जा सकता है वैश्विक चर

  • स्थैतिक स्थानीय चर एक स्थानीय चर है जो फ़ंक्शन कॉल या ब्लॉक के बीच अपने मान को बनाए रखता है और संग्रहीत करता है और केवल उस फ़ंक्शन या ब्लॉक के लिए दृश्यमान रहता है जिसमें इसे परिभाषित किया गया है।
  • स्थैतिक वैश्विक चर वैश्विक चर दृश्यमान होते हैं केवल उस फ़ाइल तक ही सीमित रहेगा जिसमें इसे घोषित किया गया है।
Example: static int count = 10;

ध्यान रखें कि स्थैतिक चर का डिफ़ॉल्ट प्रारंभिक मान शून्य होता है और इसे अपने जीवनकाल में केवल एक बार ही आरंभीकृत किया जाता है।

#include <stdio.h> /* function declaration */
void next(void);
static int counter = 7; /* global variable */
main() {
 while(counter<10) {
      next();
      counter++;   }
return 0;}
void next( void ) {    /* function definition */
   static int iteration = 13; /* local static variable */
   iteration ++;
   printf("iteration=%d and counter= %d\n", iteration, counter);}

रिजल्ट:

iteration=14 and counter= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

वैश्विक चर संपूर्ण फ़ाइल में सुलभ होते हैं, जबकि स्थैतिक चर केवल कोड के विशेष भाग तक ही सुलभ होते हैं।

स्टैटिक वैरिएबल का जीवनकाल पूरे प्रोग्राम कोड में होता है। स्टैटिक कीवर्ड का उपयोग करके घोषित या आरंभ किया गया वैरिएबल हमेशा डिफ़ॉल्ट मान के रूप में शून्य रखता है।

C में स्टोरेज क्लास पंजीकृत करें

जब आप फ़ंक्शन या ब्लॉक के भीतर स्थानीय चर को स्टोर करना चाहते हैं तो आप रजिस्टर स्टोरेज क्लास का उपयोग कर सकते हैं, बजाय इसके कि आप सीपीयू रजिस्टर में स्थानीय चर को स्टोर करें। रैम इन चरों तक त्वरित पहुँच प्राप्त करने के लिए। उदाहरण के लिए, "काउंटर" रजिस्टर में संग्रहीत किए जाने के लिए एक अच्छा विकल्प हैं।

Example: register int age;

कीवर्ड रजिस्टर रजिस्टर स्टोरेज क्लास घोषित करने के लिए उपयोग किया जाता है। रजिस्टर स्टोरेज क्लास का उपयोग करके घोषित किए गए वेरिएबल्स का पूरे प्रोग्राम में जीवनकाल होता है।

यह ऑटो स्टोरेज क्लास के समान है। चर विशेष ब्लॉक तक सीमित है। एकमात्र अंतर यह है कि रजिस्टर स्टोरेज क्लास का उपयोग करके घोषित किए गए चर मेमोरी के बजाय CPU रजिस्टर के अंदर संग्रहीत किए जाते हैं। रजिस्टर की मुख्य मेमोरी की तुलना में तेज़ पहुँच होती है।

रजिस्टर स्टोरेज क्लास का उपयोग करके घोषित किए गए वेरिएबल का कोई डिफ़ॉल्ट मान नहीं होता है। इन वेरिएबल को अक्सर प्रोग्राम की शुरुआत में घोषित किया जाता है।

#include <stdio.h> /* function declaration */
main() {
{register int  weight;
int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}
}

उत्पादन:

error: address of register variable 'weight' requested

अगली तालिका प्रत्येक स्टोरेज क्लास की प्रमुख विशेषताओं का सारांश प्रस्तुत करती है, जो आमतौर पर C प्रोग्रामिंग में उपयोग की जाती हैं

भंडारण कक्षा घोषणा भंडारण डिफ़ॉल्ट आरंभिक मान विस्तार जीवनकाल
स्वत: किसी फ़ंक्शन/ब्लॉक के अंदर याद अप्रत्याशित फ़ंक्शन/ब्लॉक के भीतर फ़ंक्शन/ब्लॉक के भीतर
रजिस्टर किसी फ़ंक्शन/ब्लॉक के अंदर सीपीयू रजिस्टर कचरा फ़ंक्शन/ब्लॉक के भीतर फ़ंक्शन/ब्लॉक के भीतर
बाहरी सभी कार्यों से बाहर याद शून्य संपूर्ण फ़ाइल और अन्य फ़ाइलें जहाँ चर को extern के रूप में घोषित किया गया है प्रोग्राम रनटाइम
स्थैतिक (स्थानीय) किसी फ़ंक्शन/ब्लॉक के अंदर याद शून्य फ़ंक्शन/ब्लॉक के भीतर प्रोग्राम रनटाइम
स्थैतिक (वैश्विक) सभी कार्यों से बाहर याद शून्य वैश्विक प्रोग्राम रनटाइम

सारांश

इस ट्यूटोरियल में हमने C में स्टोरेज क्लासेस पर चर्चा की है, संक्षेप में:

  • सी में स्टोरेज क्लास का उपयोग किसी चर के बारे में अतिरिक्त जानकारी दर्शाने के लिए किया जाता है।
  • स्टोरेज वर्ग किसी चर के दायरे और जीवनकाल का प्रतिनिधित्व करता है।
  • यह यह भी बताता है कि कौन किसी वेरिएबल तक पहुंच सकता है और कहां से?
  • ऑटो, एक्सटर्न, रजिस्टर, स्टैटिक एक सी प्रोग्राम में चार अलग-अलग स्टोरेज क्लास हैं।
  • एक भंडारण वर्ग निर्दिष्टकर्ता सी भाषा इसका उपयोग चर, फ़ंक्शन और पैरामीटर को परिभाषित करने के लिए किया जाता है।
  • ऑटो का उपयोग किसी ब्लॉक या फ़ंक्शन के भीतर परिभाषित स्थानीय चर के लिए किया जाता है
  • रजिस्टर का उपयोग त्वरित पहुंच के लिए चर को CPU रजिस्टर में मेमोरी स्थान के बजाय संग्रहीत करने के लिए किया जाता है।
  • स्टेटिक का उपयोग वैश्विक और स्थानीय दोनों चरों के लिए किया जाता है। C प्रोग्राम में प्रत्येक का अपना उपयोग मामला होता है।
  • एक्सटर्न का उपयोग C प्रोजेक्ट फाइलों के बीच डेटा साझा करने के लिए किया जाता है।