C भाषा में, वेरिएबल्स और फ़ंक्शन्स की विशेषताओं को स्टोरेज क्लासेस द्वारा वर्णित किया जाता है जैसे वेरिएबल या फ़ंक्शन की दृश्यता और स्कोप।
C भाषा में चार प्रकार के स्टोरेज क्लासेस हैं: ऑटोमैटिक वेरिएबल्स, एक्सटर्नल वेरिएबल्स, स्टैटिक वेरिएबल्स, और रजिस्टर वेरिएबल्स।
auto
ऑटो स्टोरेज क्लास सभी लोकल वेरिएबल्स के लिए डिफ़ॉल्ट स्टोरेज क्लास है। यह तब बनता है जब फ़ंक्शन कॉल किया जाता है। जब फ़ंक्शन का निष्पादन पूरा हो जाता है, तो वेरिएबल्स स्वचालित रूप से नष्ट हो जाते हैं।
इन्हें लोकल वेरिएबल्स के रूप में भी जाना जाता है क्योंकि वे एक फ़ंक्शन के लिए स्थानीय होते हैं। डिफ़ॉल्ट रूप से, कंपाइलर द्वारा उन्हें गार्बेज मान असाइन किया जाता है।
स्कोप − ऑटो वेरिएबल्स फ़ंक्शन ब्लॉक के लिए लोकल वेरिएबल्स हैं।
डिफ़ॉल्ट मान − गार्बेज मान डिफ़ॉल्ट इनिशियलाइज़्ड मान है।
लाइफटाइम − ऑटो वेरिएबल का लाइफटाइम उस ब्लॉक से बंधा होता है जिसमें यह परिभाषित है।
C भाषा में ऑटो वेरिएबल का एक उदाहरण यहाँ दिया गया है:
उदाहरण
#include <stdio.h> int main() { auto int a = 28; int b = 8; printf("The value of auto variable : %d\n", a); printf("The sun of auto variable & integer variable : %d", (a+b)); return 0; }आउटपुट
The value of auto variable : 28 The sun of auto variable & integer variable : 36
extern
एक्सटर्नल वेरिएबल्स को ग्लोबल वेरिएबल्स के रूप में भी जाना जाता है। ये वेरिएबल्स फ़ंक्शन के बाहर परिभाषित किए जाते हैं। ये वेरिएबल्स फ़ंक्शन निष्पादन भर विश्व स्तर पर उपलब्ध होते हैं। ग्लोबल वेरिएबल्स के मान को फ़ंक्शन द्वारा संशोधित किया जा सकता है।
स्कोप − वे किसी फ़ंक्शन से बंधे नहीं होते। वे प्रोग्राम में हर जगह होते हैं यानी ग्लोबल।
डिफ़ॉल्ट मान − ग्लोबल वेरिएबल्स का डिफ़ॉल्ट इनिशियलाइज़्ड मान शून्य होता है।
लाइफटाइम − प्रोग्राम के निष्पादन के अंत तक।
C भाषा में extern वेरिएबल का एक उदाहरण यहाँ दिया गया है:
उदाहरण
#include <stdio.h> extern int x = 32; int b = 8; int main() { auto int a = 28; extern int b; printf("The value of auto variable : %d\n", a); printf("The value of extern variables x and b : %d,%d\n",x,b); x = 15; printf("The value of modified extern variable x : %d\n",x); return 0; }आउटपुट
The value of auto variable : 28 The value of extern variables x and b : 32,8 The value of modified extern variable x : 15
static
स्टैटिक वेरिएबल्स केवल एक बार इनिशियलाइज़ किए जाते हैं। कंपाइलर वेरिएबल को प्रोग्राम के अंत तक बनाए रखता है। स्टैटिक वेरिएबल को फ़ंक्शन के अंदर या बाहर परिभाषित किया जा सकता है।
स्कोप − वे ब्लॉक के लिए स्थानीय होते हैं।
डिफ़ॉल्ट मान − डिफ़ॉल्ट इनिशियलाइज़्ड मान शून्य है।
लाइफटाइम − प्रोग्राम के निष्पादन के अंत तक।
C भाषा में स्टैटिक वेरिएबल का एक उदाहरण यहाँ दिया गया है:
उदाहरण
#include <stdio.h> int main() { auto int a = -28; static int b = 8; printf("The value of auto variable : %d\n", a); printf("The value of static variable b : %d\n",b); if(a!=0) printf("The sum of static variable and auto variable : %d\n",(b+a)); return 0; }आउटपुट
The value of auto variable : -28 The value of static variable b : 8 The sum of static variable and auto variable : -20
register
रजिस्टर वेरिएबल्स कंपाइलर को वेरिएबल को मेमोरी के बजाय CPU रजिस्टर में स्टोर करने के लिए कहते हैं। अक्सर उपयोग किए जाने वाले वेरिएबल्स को रजिस्टर में रखा जाता है और उनकी पहुंच तेज होती है। हम इन वेरिएबल्स के पते कभी प्राप्त नहीं कर सकते।
स्कोप − वे फ़ंक्शन के लिए स्थानीय होते हैं।
डिफ़ॉल्ट मान − डिफ़ॉल्ट इनिशियलाइज़्ड मान गार्बेज मान है।
लाइफटाइम − उस ब्लॉक के निष्पादन के अंत तक जिसमें यह परिभाषित है।
C भाषा में रजिस्टर वेरिएबल का एक उदाहरण यहाँ दिया गया है:
उदाहरण
#include <stdio.h> int main() { register char x = 'S'; register int a = 10; auto int b = 8; printf("The value of register variable b : %c\n",x); printf("The sum of auto and register variable : %d",(a+b)); return 0; }आउटपुट
The value of register variable b : S The sum of auto and register variable : 18