Automatic Storage Class
Automatic Storage Class
जब हम किसी Variable
के Declaration से पूर्व Storage Class
के रूप में auto keyword का प्रयोग करते हैं ,
तो वह Variable Automatic Storage Class में Store होता है | Automatic
Storage Class के Variables , Local Variables
होते है | इनका उपयोग वही
किया किया जा सकता है जिस Function में इनको Declare
किया गया है |
जैसे ही Program
Control उस Function से बाहर निकलता है ,
जिसमें ये Variable Declare किया गया है , तो Program
Control के उस Function से बाहर निकलते ही उस Variable
का मान नष्ट हो जाता है |
जब
हम किसी Function
में Variable Declare करते हैं , और उसके साथ
किसी भी Storage Class का प्रयोग नहीं करते है , तो “C”
Compiler उसे Default रूप से Automatic
Storage Class का मान लेता है |
जैसे
auto int num = 0 व int num =0
इन दोनों ही Declaration
का अर्थ समान ही है | Automatic
Class की एक खास बात ये भी है कि यदि एक ही नाम के कई Variables
के ही प्रोग्राम में विभन्न Function में Declare
किये जाएं और हर Function में Variable
को भिन्न मान प्रदान किया जाए , तो भी Program Control इसे मान्य करता है |
क्योंकि एक main()
Function के अंदर लिखें गए विभन्न User Defined Function में Variable का नाम समान होने पर भी , यदि UDF
में उस समान नाम वाले Variable का मान
परिवर्तन हो रहा हो तो भी main() Function में उस परिवर्तन
का कोई फर्क नहीं पड़ता है | हम
यही बात एक प्रोग्राम द्वारा समझाने कि कोशिश
करते हैं |
Program
#include<stdio.h>
main()
{
auto int num=6;
{
{
printf("%d",num);
}
printf("%d",num);
}
printf("%d",num);
getch();
}
Output
666
इस प्रोग्राम के Output
में 666 प्राप्त हुआ |
इस
प्रोग्राम में हर Block में एक printf()
Function है , जो num के मान को print कर रहा है | जब
Program
control प्रथम Statement Block में प्रवेश
करता है , तो वहां उसे दूसरा Statement Block प्राप्त होता
है | .यहां
num
नाम के Variable में Store मान को Print करने का Statement लिखा है , जो main() Function में लिखें num के मान 6 को print कर देता है |
फिर Program
Control इस Statement Block से बाहर आता है |
यहां
वापस उसे एक Printf() Function मिलता है और वापस num
नाम के Variable का मान print किया जाता है |
Variable में
जब Program Control इस Statement Block से भी बाहर निकलता है , तब उसे main() Function में
लिखा printf() Function प्राप्त होता है |
वापस
num
का मान 6 print हो जाता है |
इस प्रकार तीनों Block
में num का मान 6 ही print
हुआ क्योंकि हर Statement Block main() Function में लिखें num के मान को ही Print कर रहा है | जबकि
नीचें लिखे इसी प्रोग्राम में थोडा सा बदलाव करने से Output में
हमें भिन्न – भिन्न संख्याएं प्राप्त हो रही है |
Program
#include<stdio.h>
main()
{
auto int num=6;
{
auto int num=8;
{
auto int num=1;
printf("%d",num);
}
printf("%d",num);
}
printf("%d",num);
getch();
}
Output
186
इस प्रोग्राम को Execute
करने पर हमें 186 Output प्राप्त होता है |
आइये
समझने की कोशिश करते हैं कि ऐसा क्यों हुआ | जब
प्रोग्राम Control main() Function में पहुंचता है
, तो वहां num नाम के एक Variable को Declare
करता है और उसका मान 6 Initialize करता है |
फिर
Program
Control आगे बढ़ता है, तब उसे एक Statement Block प्राप्त होता है |
इस Statement
Block में पहुँचते ही Program Control को वापस
एक auto Storage Class का Variable num प्राप्त होता है | “C”
Compiler इसे भी Memory में जगह देता है और
इसका प्रारम्भिक मान 8 Initialize करता है |
Program
Control इसमें आगे बढ़ता है , तो वापस उसे एक Statement Block प्राप्त होता है और यहां वापस एक auto Storage Class का Variable num Declare करता है और इसे मान 1
Assign करता है |
इसी Statement
Block में अगला Statement है , जिसमें Printf()
Function द्वरा num के मान को Print किया गया है | num
का मान तो तीनों Blocks में भिन्न है तो फिर
कौनसा मान Output में
Print होगा ?
यहां अंक 1
Output में print हो रहा है |
ऐसा
इलिए हो रहा है ,क्योंकि किसी भी प्रोग्राम के किसी भी function
में जब किसी Variable के मान को Print करवाया जाता है तो “C” Compiler सर्वप्रथम दिए गए Variable के नाम को Local
Variables में ढूँढता है और यदि Local Variables में उस नाम का Variable नहीं मिलता , तब Program
control उसी प्रोग्राम में कहीं और यानी उस Statement Block या Function से बाहर उस नाम के Variable को
ढूँढता है और जहां उस नाम का Variable प्राप्त हो जाता है ,
वही का मान Output में Print कर देता
है |
ध्यान दें कि यह Variable
ढूँढने का क्रम Inner Block से Outer
block की ओर चलता है | यानी यदि हमारे Program में हम किसी Statement Block में है और वहां किसी Variable
का मान Print करवा रहें हैं , तो
सर्वप्रथम Program control चौथे Statement Block में उस Variable को ढूंढेगा | यदि
Program
Control को चौथे Statement block में वह Variable
प्राप्त नहीं होता , तो Program Control तीसरे
Statement Block में उस Variable को
खोजेगा |
यदि तीसरे में भी
वह Variable प्राप्त न हो तो दूसरे Statement
Block में उस Variable को खोजेगा और यदि यहां
भी उसे वह Variable प्राप्त न हो तो अंत में Program
control main() Function में उस Variable को
खोजेगा | इस क्रम में जहां
भी पहले वह Variable प्राप्त हो जाएगा Program
Control वही के मान को उस चौथे Inner Block द्वारा
Output में Print कर देगा |
इसी कारण से ऊपर
बताये गए प्रथम प्रोग्राम में तीनों Statement Blocks में num का मान 6 ही Print
हुआ है | लेकिन
इस प्रोग्राम में ऐसा नहीं हुआ है | क्योंकि
इस प्रोग्राम में हर Statement Block में num
नाम का एक Variable Declare किया गया है , जो
कि उस
Statement
Block के लिए एक Local Variable है और जैसा कि
हमने अभी कहा कि जब Program control को किसी Variable
के मान के साथ प्रक्रिया करनी होती है , तो सर्वप्रथम Program
Control उस Variable को Local
Variables में खोजता है |
यहां दूसरे Statement
Block में num का मान 1 Assign किया गया है और इसी Block में num को print किया गया है , इसलिए यहां num का मान 1 ही Output में Print
हो रहा है | इस
Statement
Block के अलावा जो दो अन्य Variables हैं ,
जिनका नाम भी num ही है |
Statement
Block से बाहर होने के कारण
इस Statement Block के लिए वे num Global Variable हो गए हैं | यदि
हम इस तीसरे Statement Block में num को Declare नहीं करते और num को
Print करते तो Program Control Outer Statement Block के num के मान 8 को Output में Print
कर देता और हमारा Output
886 प्राप्त होता |
इसी प्रकार जब Program Control इस Statement Block से बाहर आता है , तब उसे यदि Print()
Function प्राप्त होता है और यहां Output में num
का मान 8 Print होता है , क्योंकि इस Statement
Block में भी num नाम का एक Local
Variable Declare किया गया
है , जिसका मान 8 दिया
गया है | यदि यहां पर ये Variable
Declare नहीं करते तो Output में यहां 8
की बजाये 6 Print होता और हमारा Output
166 होता |
No comments