स्टोरेज क्लासेस वेरिएबल्स के स्कोप, लाइफटाइम और बाइंडिंग को निर्दिष्ट करते हैं।
एक वेरिएबल को पूरी तरह से परिभाषित करने के लिए, न केवल उसका 'टाइप' बल्कि उसका स्टोरेज क्लास भी बताना आवश्यक है।
एक वेरिएबल नाम कंप्यूटर मेमोरी में कुछ भौतिक स्थान की पहचान करता है, जहां वेरिएबल के मानों को स्टोर करने के लिए बिट्स का संग्रह आवंटित किया जाता है।
स्टोरेज क्लास हमें निम्नलिखित कारक बताता है:
- वेरिएबल कहां स्टोर होता है (मेमोरी या CPU रजिस्टर में)?
- यदि कुछ इनिशियलाइज़ नहीं किया गया तो वेरिएबल का प्रारंभिक मान क्या होगा?
- वेरिएबल का स्कोप क्या है (इसे कहां एक्सेस किया जा सकता है)?
- वेरिएबल का जीवन क्या है?
लाइफटाइम (जीवनकाल)
वेरिएबल का जीवनकाल उस अवधि को परिभाषित करता है जिसके लिए कंप्यूटर इसके लिए मेमोरी आवंटित करता है (मेमोरी आवंटन और डी-आवंटन के बीच की अवधि)।
C भाषा में, एक वेरिएबल का ऑटोमैटिक, स्टैटिक या डायनामिक लाइफटाइम हो सकता है।
- ऑटोमैटिक - ऑटोमैटिक लाइफटाइम वाले वेरिएबल हर बार बनाए जाते हैं जब उनका डिक्लेरेशन एनकाउंटर होता है और नष्ट हो जाते हैं जब उनके ब्लॉक एग्जिट होते हैं।
- स्टैटिक - वेरिएबल पहली बार डिक्लेरेशन निष्पादित होने पर बनाया जाता है। यह नष्ट होता है जब निष्पादन रुकता/समाप्त होता है।
- डायनामिक - वेरिएबल की मेमोरी मेमोरी मैनेजमेंट फंक्शन्स के माध्यम से आवंटित और डी-आवंटित की जाती है।
स्टोरेज क्लासेस
C भाषा में चार स्टोरेज क्लासेस हैं:
| स्टोरेज क्लास | स्टोरेज एरिया | डिफ़ॉल्ट प्रारंभिक मान | लाइफटाइम | स्कोप | कीवर्ड |
|---|---|---|---|---|---|
| ऑटोमैटिक | मेमोरी | गार्बेज मान | कंट्रोल ब्लॉक में रहने तक | लोकल | auto |
| रजिस्टर | CPU रजिस्टर | गार्बेज मान | कंट्रोल ब्लॉक में रहने तक | लोकल | register |
| स्टैटिक | मेमोरी | शून्य | फंक्शन कॉल्स के बीच मान | लोकल | static |
| एक्सटर्नल | मेमोरी | गार्बेज मान | पूरे प्रोग्राम निष्पादन के दौरान | ग्लोबल | extern |
उदाहरण: ऑटोमैटिक स्टोरेज क्लास
#include <stdio.h>
main() {
auto int i = 1;
{
auto int i = 2;
{
auto int i = 3;
printf("%d", i);
}
printf("%d", i);
}
printf("%d", i);
}
आउटपुट
3 2 1
उदाहरण: एक्सटर्नल स्टोरेज क्लास
#include <stdio.h>
extern int i = 1; /* यह 'i' पूरे प्रोग्राम में उपलब्ध है */
main() {
int i = 3; /* यह 'i' केवल main में उपलब्ध है */
printf("%d", i);
fun();
}
fun() {
printf("%d", i);
}
आउटपुट
3 1