Storage Class
अभी तक हल किए गए सभी उदाहरणों में variables(वेरिएबल) को Declare(डिक्लेयर) करते समय उसका Data Type(डेटा टाइप) लिखा गया है, किन्तु उसका यह प्रारूप अधूरा है। वेरिएबल को डिक्लेयर करते समय Storage class(स्टोरेज क्लास) का उल्लेख भी किया जा सकता है। Storage Class(स्टोरेज क्लास) के सहित वेरिएबल को डिक्लेयर करने का प्रारूप निम्न प्रकार है:
storage_class data_type variable_name;
उपरोक्त प्रारूप में Storage Class(स्टोरेज क्लास) बताना वैकल्पिक है। यदि यह नहीं बताई जाती है तो Default(डिफॉल्ट) Storage Class(स्टोरेज क्लास) vauto मानी जाती है।
स्टोरेज क्लास यह स्पष्ट करती है कि.
- वेरिएबल मैमोरी में कहां पर स्टोर होगा,
- वेरिएबल की प्रारंभिक वैल्यू क्या स्टोर होगी,
- वेरिएबल कहां पर प्रयोग हेतु उपलब्ध होगा और कहां पर नहीं,
- वेरिएबल कब तक मैमोरी में रहेगा।
स्टोरेज क्लास 4 प्रकार की होती है: auto register, static और extern.
1) Auto Storage Class
Variable memory में कहाँ पर Store होगा, | RAM में |
Variable की प्रारंभिक वैल्यू क्या स्टोर होगी, | गारबेज |
वेरिएबल कहां पर प्रयोग हेतु उपलब्ध होगा और कहां पर नहीं | सिर्फ उसी ब्लॉक में जहां उसे डिक्लेयर किया गया है। किसी भी सब-ब्लॉक में ऐसे वेरिएबल को प्रयोग नहीं किया जा सकेगा। ऐसे सब-ब्लॉक में यह वेरिएबल छुप (hide) जाते हैं। |
वेरिएबल कब तक मैमोरी में रहेगा | जिस ब्लॉक में उसे डिक्लेयर किया गया है उसके अंत तक। |
एक ब्लॉक की पहचान ( तथा ) कोष्ठकों के खुलने से लेकर बन्द होने तक होती है। यदि किसी वेरिएबल को डिक्लेयर करते समय स्टोरेज क्लास नहीं बताई गई है तो कंपाइलर उसे auto ही मानता है।
उपरोक्त उदाहरण में Block 1 में वेरिएबल तथा को डिक्लेयर किया गया है। यह चेरिएबल इस ब्लॉक के अंत तक मैमोरी में स्थित रहेंगे। वेरिएबल) को चूंकि सब-ब्लॉक 2 में भी डिक्लेयर किया गया है अतः यह इस सब-ब्लॉक के समाप्त होते ही मैमोरी से नष्ट हो जाएगा। इससे ब्लॉक 1 के की वैल्यू गारबेज प्रिंट होगी। उपरोक्त प्रोग्राम का आउटपुट निम्न प्रकार होगा:
the value of j = 20
the value of i = 10
the value of j = 5
the value of i = 10
2) register Storage Class:-
'सी' ऐसे वेरिएबल को RAM(रैम ) की जगह CPU Register(सीपीयू रजिस्टर) में ही स्टोर करने की कोशिश करता है। CPU Register(सीपीयू रजिस्टर) RAM(रैम ) की तुलना में बेहतर गति उपलब्ध कराता है, किन्तु चूंकि ऐसे Register(रजिस्टर) सीमित संख्या में होते हैं, अत: यह सुनिश्चित नहीं होता है कि ऐसे वेरिएबल को CPU Register(सीपीयू रजिस्टर) में स्थान मिल ही जाए। यदि स्थान नहीं मिलता है तो रजिस्टर वेरिएबल भी बिल्कुल auto वेरिएबल की भांति ही कार्य करते हैं।
Output:-
7343540
3) Static Storage Class:-
Variable memory में कहाँ पर Store होगा, | RAM में |
Variable की प्रारंभिक वैल्यू क्या स्टोर होगी, | शून्य (0) |
वेरिएबल कहां पर प्रयोग हेतु उपलब्ध होगा और कहां पर नहीं | सिर्फ उसी ब्लॉक में जहां उसे डिक्लेयर किया गया है। किसी भी सब-ब्लॉक में ऐसे वेरिएबल को प्रयोग नहीं किया जा सकेगा। ऐसे सब-ब्लॉक में यह वेरिएबल छुप (hide) जाते हैं। |
वेरिएबल कब तक मैमोरी में रहेगा | प्रोग्राम के अंत तक |
स्टेटिक वेरिएबल हालांकि उसी ब्लॉक में प्रयोग किए जा सकते हैं, जिसमें उन्हे डिक्लेयर किया गया है, किन्तु यह उस ब्लॉक विशेष के समाप्त होने पर स्वतः नष्ट नहीं होते है। ऐसी स्थिति में यदि उसी ब्लॉक विशेष को दोबारा रन कराया जाता है तो वह स्टेटिक वेरिएबल चूंकि पहले से ही मैमोरी में होता है. स्वतः सक्रिय हो जाता है, तथा उसकी वहीं वैल्यू जो पिछली बार रन कराते समय थी, प्रयोग में ली जा सकती है। इसे नीचे दिए गए उदाहरण से समझा जा सकता है:
उपरोक्त प्रोग्राम को रन कराने पर आउटपुट में 0 12 आएगा, वहीं यदि इस प्रोग्राम में से static शब्द को हटा दिया जाए तो यही आउटपुट गारबेज आएगा।
4) extern Storage Class:-
Variable memory में कहाँ पर Store होगा, | RAM में |
Variable की प्रारंभिक वैल्यू क्या स्टोर होगी, | शून्य (0) |
वेरिएबल कहां पर प्रयोग हेतु उपलब्ध होगा और कहां पर नहीं | पूरे प्रोग्राम में |
वेरिएबल कब तक मैमोरी में रहेगा | प्रोग्राम के अंत तक |
इस प्रकार extern के प्रयोग से किसी वेरिएबल को पूरे प्रोग्राम में प्रयोग किया जा सकता है कि ऐसे वेरिएबल की वैल्यू को कोई भी फंक्शन बदल सकता है अतः इसका प्रयोग ध्यानपूर्वक करना चाहिए।
Most Important Point
- स्टोरेज क्लास यह स्पष्ट करती है कि वेरिएबल मैमोरी में कहां पर स्टोर होगा, उसकी प्रारंभिक वैल्यू क्या होगी, वह कहां पर प्रयोग हेतु उपलब्ध होगा, तथा वह कब तक मैमोरी में स्टोर रहेगा।
- स्टोरेज क्लास 4 प्रकार की होती है auto register static और extern.
0 Comments