C भाषा में स्टोरेज क्लास Storage Class in C

C भाषा में स्टोरेज क्लास Storage Class in C


C भाषा में, स्टोरेज क्लास संबंधित होता है वह तरीके से कंपाइलर द्वारा वेरिएबल के लिए मेमोरी स्थान आवंटित करने के लिए उपयोग किए जाने वाले स्पेसिफाइर होते हैं। इसके अलावा, स्टोरेज क्लास वेरिएबल के लाइफ साइकल और उसकी विद्यमानता के संबंध में भी संबंधित होता है। 


भाषा में, निम्नलिखित स्टोरेज क्लास होते हैं: 

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

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

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

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

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

register स्टोरेज क्लास उन वेरिएबलों के लिए उपयोग किया जाता है जो गति के लिए अत्यंत आवश्यक होते हैं। ये वेरिएबल CPU के रजिस्टर में संग्रहित होते हैं, जो उनकी गति को बढ़ाते हैं। 

अंततः, volatile स्टोरेज क्लास वेरिएबल के लिए उपयोग किया जाता है जो हमेशा अद्यतन होते रहते हैं। यदि एक वेरिएबल volatile होता है, तो कंपाइलर को उसे हमेशा उसके मूल्य को अद्यतन करने के लिए पढ़ना चाहिए। 

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

C भाषा की सभी स्टोरेज क्लास को र्पोग्राम में example से बताये 

C भाषा में कुल 4 स्टोरेज क्लास होती हैं: 

  • Automatic Storage Class 
  • Static Storage Class
  • Register Storage Class 
  • External Storage Class 

इन सभी स्टोरेज क्लास का उपयोग अलग-अलग विभिन्न स्थितियों में किया जाता है। 

नीचे दिए गए उदाहरण में हमने सभी स्टोरेज क्लास का उपयोग दिखाया है: 

#include 

 // Automatic Storage Class 
void func1() { 

     auto int a = 10; 
     printf("Value of a in func1 is %d\n",a); 

 } 

 // Static Storage Class 
void func2() { 

     static int b = 20; 
     printf("Value of b in func2 is %d\n", b); b++; 

 } 

 // Register Storage Class 
void func3() {

    register int c = 30; 
     printf("Value of c in func3 is %d\n", c); 


 // External Storage Class 
extern int d; 
void func4() { 

     printf("Value of d in func4 is %d\n", d); 


 int main() { 

     // Automatic Storage Class 
     func1(); 
 
    // Static Storage Class 
     func2(); 
     func2(); 

    // Register Storage Class 
     func3(); 

     // External Storage Class 
     d = 40; 
     func4(); 

     return 0; 

 } 
 int d; 

यहां, func1() में auto स्टोरेज क्लास का उपयोग किया गया है जिससे a नामक एक चर को मेमोरी में स्टोर किया जाता है। इसके बाद a की मान्यता printf के माध्यम से छपाई जाती है। 

func2() में static स्टोरेज क्लास का उपयोग किया गया है जिससे b नामक एक चर को मेमोरी में स्थाई रूप से स्टोर किया जाता है। b की मान्यता printf के माध्यम से छपाई जाती है और इसके बाद b का मान बढ़ाया 

fun3() और fun4() दो अलग-अलग फ़ंक्शन हैं जो कि static स्टोरेज क्लास से बनाए गए हैं। 

fun3() में, static लोकल वेरिएबल x को पहले 0 से इनिशियलाइज़ किया जाता है। फ़ंक्शन के हर बार कॉल होने पर, x की मान 1 बढ़ाई जाती है और उसका मान वापस लौटाया जाता है। fun3() को तीन बार कॉल करने पर, x की मान 3 होगी। 

fun4() में, static लोकल वेरिएबल x को पहले 0 से इनिशियलाइज़ किया जाता है। फ़ंक्शन के हर बार कॉल होने पर, x की मान 1 बढ़ाई जाती है और उसका मान वापस नहीं लौटाया जाता है। इसलिए, fun4() को तीन बार कॉल करने पर, x की मान 3 नहीं होगी, बल्कि 1 ही रहेगी।