C में स्टोरेज क्लासेस: C में ऑटो, एक्सटर्नल, स्टैटिक, रजिस्टर क्लास

विषय - सूची:

Anonim

C में Storage Class क्या है?

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

  • चर गुंजाइश।
  • वह स्थान जहाँ चर संग्रहित किया जाएगा।
  • एक चर का प्रारंभिक मूल्य।
  • एक चर का जीवनकाल।
  • एक चर का उपयोग कौन कर सकता है?

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

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

कुल चार प्रकार के मानक भंडारण वर्ग हैं। नीचे दी गई तालिका C में संग्रहण कक्षाओं का प्रतिनिधित्व करती है।

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

इस C ट्यूटोरियल में, आप C के विभिन्न प्रकारों को उदाहरणों के साथ C में जानेंगे-

  • C में ऑटो स्टोरेज क्लास
  • C में एक्सटर्नल स्टोरेज क्लास
    • पहली फ़ाइल: main.c
    • दूसरी फ़ाइल: original.c
  • सी में स्थैतिक भंडारण वर्ग
  • C में संग्रहण वर्ग पंजीकृत करें

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

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

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

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

Example, auto int age;

नीचे दिए गए कार्यक्रम में दो स्थानीय चर होते हैं

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

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

#include 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);}

OUTPUT:

 3 2 1 

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

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

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

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

Example, extern void display();

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

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

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

#include i=48;

परिणाम:

 value of the external integer is = 48

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

चरण 1) नई परियोजना बनाएं,

  1. कंसोल एप्लिकेशन का चयन करें
  2. Go पर क्लिक करें

चरण 2) सी का चयन करें और अगला पर क्लिक करें

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

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

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

चरण 6) मुख्य प्रोग्राम को पिछले प्रोग्राम में दिखाया गया है जैसे कि मेन सी फाइल में रखें और इसे सेव करें

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

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

चरण 9) अपनी परियोजना बनाएं और चलाएं। परिणाम अगले आंकड़े में दिखाया गया है

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

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

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

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

#include  /* 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= 7iteration=15 and counter= 8iteration=16 and counter= 9

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

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

C में संग्रहण वर्ग पंजीकृत करें

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

Example: register int age;

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

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

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

#include  /* 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*/}}

OUTPUT:

error: address of register variable 'weight' requested

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

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

सारांश

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

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