Storage Class in C Language

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Storage Class in C: जब कोई Variable मान प्राप्त करता है तो वह मान Memory में Store होता है। “C” में Variable की Value Store होने की दो Locations हो सकती हैं:

  1. Main Memory
  2. C. P. U. Resister

Variable के मान को हम हमारी जरूरत के अनुसार इन दोनों में से किसी भी मनचाही जगह पर रख सकते हैं। Variable के मान को Memory में अलग-अलग जगह Store करने की Locations को ही “C” की Storage Class कहते हैं। “C” Language में मुख्‍य रूप से चार Storage Class हैं।

प्रोग्राम के Variable का जो भाग वास्तव में Active रूप से प्रोग्राम में Use हो रहा होता है, उसे Variable का Scope कहा जाता है और किसी Variable में Store मान कब तक Accessible रहेगा इसे Variable की Longevity कहते हैं। Variable को भी हम तीन भागों में बांट सकते हैं। ये भाग Variable के Declaration पर निर्भर करते हैं।

 

Type of Variables In Program

किसी प्रोग्राम में Variables को मुख्‍यत: तीन प्रकार से Declare किया जा सकता है और इन तीनों प्रकार के Variables का अपना अलग प्रकार का काम होता है।

Internal or Local or Private Variables

वे Variables जो किसी भी Function के Statement Block में अंदर (यानी मंझले कोष्‍ठक के अन्दर) Declare किये जाते हैं, Local Variables कहलाते हैं। ये जिस Function में उपयोग के लिए Declare किये जाते हैं, उस Function का काम पूरा होते ही या Program Control के उस Function के Statements का Execution करके Statement Block से बाहर निकलते ही, ये Variables व इनके मान नष्‍ट हो जाते हैं। इन Variables का मान किसी भी प्रकार से किसी अन्‍य Function को असर नहीं पहुंचाता है। अभी तक हमने जितने भी प्रोग्राम बनाए है, उन सभी में Local Variables का प्रयोग किया गया है।

Formal Variables

जब Calling Function से कोई मान किसी User Defined Function में Pass किया जाता है, तो वह Actual Argument के रूप में User Defined Function को Variable का वास्तविक मान भेजता है। User Defined Function में Calling Function से आने वाले मान को Receive करने के लिए जिन Variables को Define किया जाता है, वे Variables, Formal Variables कहलाते हैं। क्योंकि ये केवल औपचारिक Variables होते हैं, जिनमें Calling Function से मान आता है। Formal Variables किसी भी Function के Statement Block से (यानी मंझले कोष्‍ठक से पहले) बाहर की तरफ Declare किये जाते हैं।

External or Global or Public Variables

इस प्रकार के Variables main() Function के Statement Block से बाहर Declare किये जाते हैं। इस प्रकार के Variables की विशेषता ये होती है, कि इस प्रकार के Variables को प्रोग्राम में कोई भी Function या User Defined Function Use कर सकता है। इन्हे एक बार ही Define व Declare किया जाता है और फिर इन्हे कहीं भी प्रयोग में लाया जा सकता है। इन्हे वापस Declare करने की जरूरत नहीं रहती है। जैसे निम्न प्रोग्राम देखें-

// Program
#include<stdio.h>
int x = 6, y = 8, z = 4;
main()
{
	int b, c ;
	c = x + y;
	printf("\n C is %d ", c);
	b = y – z;
	printf("\n B is %d ", b);
	mul(b);
	getch();
}

mul(int l)
{
	int m;
	m = l * y;
	printf("\n Multiplication of B and Y is %d ", m);
} 

// Output
   C is 14
   B is 4
   Multiplication of B and Y is 32

आइये, समझते हैं कि ये Output किस प्रकार प्राप्त हुआ। जैसा कि हमने पहले कहा कि Global Variables का उपयोग कोई भी Function कर सकता है, इसलिए यहां c = x + y;  Expression से Global Variable x का मान 6 व Global Variable y का मान 8 जुड कर Local Variable c को 14 प्राप्त हो गया है। इसी प्रकार b = y – z; से Global Variable y के मान 8 में से Global Variable z का मान 4 घट कर, प्राप्त मान Local Variable b को प्राप्त हो गया है। इस प्रकार b का मान Output में 4 print हुआ है।

ध्‍यान दें कि इस प्रोग्राम में mul नाम के User Defined Function को केवल एक ही मान (Local Variable b) को Actual Argument के रूप में भेजा गया है और इसके Formal Variable को Prototype के रूप में int प्रकार का Declare किया गया है। mul, User Defined Function में एक Local Variable m Declare किया गया है।

यहां Global Variable y के मान को Declare नहीं किया गया है बल्कि सीधे ही mul Function में उपयोग में ले लिया गया है। इस प्रकार Global Variable को प्रोग्राम में केवल एक ही बार Declare करना होता है, फिर Global Variable के मान को Program में कहीं भी Use किया जा सकता है।

Automatic Storage Class in C

जब हम किसी 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;
	clrscr();
	{
		{
			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;
	clrscr();
	{
		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 के चौथे Inner 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 होता।

Extern Storage Class in C

इस Class में वे Variables होते हैं, जिन्हें कोई भी अन्‍य Function Use कर सकता है। ये Global Variables होते हैं और इन्हे main() Function से बाहर Declare किया जाता है। ये Variables main() Function से पहले लिखे जाते हैं, और इसमें प्रोग्राम के अंत तक मान Store रहता है।

जब किसी प्रोग्राम में लगभग हर Function में किसी Variable का प्रयोग हो रहा हो, तो उस Variable को extern Keyword का प्रयोग करके Global Declare कर दिया जाता है, ताकि Memory Space बच सके और प्रोग्राम लम्बा व जटिल ना हो जाए। जैसे extern int num = 10; Global Variable की ये विशेषता होती है कि इसका प्रयोग कोई भी Block या Function कर सकता है और अपनी जरूरत के अनुसार इसका मान बदल सकता है।

अभी तक हमने देखा कि हम main() Function व User Defined Function सभी एक ही Program File में लिखते रहे हैं, लेकिन वास्तविक जीवन में जब हम बडे-बडे प्रोग्राम लिखते हैं, तब सारे के सारे Program Codes एक ही Program File में ना लिख कर कई Files में, User Defined Function के रूप में लिख देते हैं और उन्हें Compile कर लेते हैं। फिर हम उस Function फाईल को main() Program File में Link कर लेते हैं। जब हमें किसी Function की जरूरत होती है, तब उस File से Required Function को Call कर लेते हैं।

ये एक महत्वपूर्ण तरीका है, क्योंकि इस तरीके में किसी एक File में हुए Changes का किसी अन्‍य File पर कोई फर्क नहीं पडता है। जब हम एक से अधिक Source Files का प्रयोग करते हैं, तब कुछ Global Variables होते हैं, जिन्हे किसी भी अन्‍य User Defined Function में Use करना होता है।

किसी भी User Defined Function में किसी अन्‍य Source File में लिखे Global Variables को Use करने की सुविधा हम extern Keyword का प्रयोग करके प्राप्त कर सकते हैं। जब हम किसी Global Variable को किसी अन्‍य Source File में Use करना चाहते हैं, तब उस Global Variable को extern Keyword का प्रयोग करके लिखते हैं।

extern Keyword “C” Compiler को ये बताता है कि वह अमुक Global Variable किसी अन्‍य Source Code File में Declare किया गया है। extern Variable को ठीक से समझने के लिए हम यहां पूर्व में बनाए गए Function को ही दूसरे तरीके से बना रहे हैं। सबसे पहले नीचे लिखे mul Function को एक Source File में Save करते हैं और इस File का नाम extern.c देते है-

// Function
mul(int l)
{
	extern y;
	int m;
	m = l * y;
	printf("\n Multiplication of B and Y is %d ", m);
}

अब निम्न प्रोग्राम को एक अलग Source File में लिख कर उसे extern.c नाम से save करते हैं।

// Program
#include<stdio.h>
#include "extern.c"

int x = 6, y = 8, z = 4;

main()
{
	int b, c ;
	c = x + y;
	printf("\n C is %d ", c);
	b = y – z;
	printf("\n B is %d ", b);
	mul(b);
}

इस प्रोग्राम को Execute करने पर भी वही Output प्राप्त होता है, जो पिछली बार प्राप्त हुआ था। लेकिन इस प्रोग्राम में हमने दो Source Files को Use किया है। mul Function को एक अन्‍य Source File extern.c में लिखा है। इस Function को main() Program में Use करने के लिए main() Program में #include “extern.c” Statement से mul Function की Program File को Link किया गया है।

“C” में किसी पहले से बनी Source File को दो तरीकों से main() Program File में Link किया जा सकता है। जब हमें जो File हमारी main() Program File में Use करनी है, वह यदि “C” की Standard Library में होती है, तो उसे <  > चिन्ह के बीच में लिखते हैं। लेकिन जब हमारी Source File Current Directory जिसमें हम Currently काम कर रहे हैं, उसमें हो, तब हम उस Function File को main() Program File से link करने के लिए उसे #include Keyword के साथ ”  ” के अन्दर लिखते हैं। जैसा कि इस प्रोग्राम में किया गया है। हम हमारे द्वारा बनाए गए Functions को एक अलग Directory में भी Store करके रख सकते हैं।

जब हम हमारे Functions किसी अलग Directory में Store करके रखते हैं, तब हमें main() Program से उस Function File को Link करने के लिए उस File का पूरा path < > या ” ” चिन्ह के बीच लिखना पडता है।

माना हमने C: Drive में एक My_Functions नाम का Folder बनाया है, और हमारे द्वारा बनाए गए सारे Functions हम इसी Folder में रख रहे हैं, तो इस Folder से किसी भी Function को main() Program में Link करने के लिए हमें निम्नानुसार Statement लिख कर हमारी जरूरत वाली File को main() Program में जोडना होगा।

#include <C:\my_Functions\ File name>

  OR

#include “C:\my_Functions\ File name”

ध्‍यान रखें कि ये Code इसी प्रकार से लिखे जाते हैं। इनके बीच Space मान्‍य नहीं है। अब देखें कि mul Function में y को Declare नहीं किया गया है बल्कि extern y; लिखा गया है। ये Statement “C” Compiler को बताता है कि जो Variable y यहां Use हो रहा है वह Global Variable है और उसे किसी अन्‍य Source File में Declare किया गया है। जब इस File को main() Program File से Link किया जाता है, तब Program Control स्वयं ही y का मान main() Program File से प्राप्त कर लेता है और यहां पर Calculation की जाती है।

इस प्रकार से extern Storage Class में Variable को Use किया जाता है। ध्‍यान रखें कि extern का प्रयोग हमेंशा Secondary Reference बनाने में किया जाता है। इसलिए किसी भी Global Variable का नाम एक प्रोग्राम में केवल एक ही बार Use करना चाहिये अन्‍यथा “C” Compiler Confuse हो जाएगा कि किस Variable का मान वह Access करे।

Static Storage Class in C

हम जिन Variables को static Class में रखते हैं उन Variables मे Store किये गए मान प्रोग्राम के अंत तक Memory में रहते हैं। किसी Variable को static Declare करने के लिए हम “C” के static Keyword का प्रयोग करते हैं। जैसे static int value; एक static Class में Declare Variable, Local भी हो सकता है और Global भी।

हम किसी भी Variable को static Declare कर सकते हैं। एक Local Variable के रूप में एक Static Variable, Automatic Class के Variable की तरह ही काम करता है। लेकिन फिर भी auto व static प्रकार के Variables में कुछ अन्तर होता है। static प्रकार के Variable की प्रकृति को अच्छी तरह से समझने के लिए हम नीचे दो प्रोग्राम बना रहे हैं।

Storage Class in C Language in Hindi

Storage Class in C Language in Hindi

जैसा कि पहले प्रोग्राम में हुआ है। इस पहले प्रोग्राम में k को auto प्रकार का लिया है, इसलिए जैसे ही Program Control इस Loop के Statement Block से बाहर जाता है, k का मान वापस 0 Initialize हो जाता है। लेकिन जो Variable static प्रकार की Storage Class में Declare किये जाते हैं उन Variables में मान Program के अन्त तक रहते है।हमने हमेंशा देखा है कि जब भी किसी Loop के प्रथम Iteration के बाद पुन: Program Control दूसरे Iteration के लिए उस Loop में प्रवेश करता है तो Loop के अंदर प्रयोग किये गए किसी भी Variable का मान पुन: वही हो जाता है जो Initialize कर दिया जाता है।

यही कारण है कि जहां प्रथम प्रोग्राम के Output में k का मान Loop के तीनों Iteration में समान आ रहा है वहीं दूसरे Program में Loop के हर Iteration में k का मान बदल रहा है। क्योंकि Static Variable में Store मान Program Control के Loop से बाहर जाने के बावजूद भी नहीं मिटता है। Program Execution के दौरान सर्वप्रथम k का Declare होता है साथ ही k को प्रारम्भिक मान 0 Initialize किया जाता है।

Program Control जब for Loop में प्रवेश करता है तो k = k + 1; Expression से k का मान Increment होकर 1 हो जाता है। Program Control k के मान को Print करता है और Statement Block से बाहर आ जाता है।

वापस जब दूसरे Iteration के लिए Program Control इस Statement Block में प्रवेश करता है तो वापस उसे k = k + 1 Expression मिलती है। Program Control वापस k का मान एक और बढाता है। लेकिन हमने k को इस प्रोग्राम में Static Storage Class के अंतर्गत Declare किया है इसलिए जब Program Control वापस इस Statement Block में प्रवेश करता है तो k का पुराना मान नष्‍ट नहीं होता बल्कि स्थिर रहता है। इस Statement से वापस 1 अंक Increment हो कर k का मान अब 2 हो जाता है और ये क्रम तब तक चलता रहता है जब तक कि for Loop की Condition false ना हो जाए यानी Loop Terminate ना हो जाए।

Register Storage Class in C

हम जिन Variables को Register Storage Class में रखते हैं, उन Variables मे Store मान Memory में Store ना हो कर C. P. U. Register में Store होते हैं। C. P. U. Resister में Store होने वाले Variable की Access Rate या Access गति Memory की तुलना में बहुत अधिक होती है। ये केवल Local Variable के साथ ही प्रयोग होते हैं और किसी भी प्रोग्राम में Resister Variable की संख्‍या 14 से अधिक नहीं हो सकती है।

यदि हम 14 से अधिक Variable को Register प्रकार का Declare करते हैं तो Program Control स्वयं ही पिछले Variables को auto प्रकार के Variables में Convert कर देता है। यानी यदि हम किसी प्रोग्राम में 15 Variable को Register प्रकार का Declare करेंगे तो सबसे पहला Variable auto प्रकार में Convert हो जाएगा। क्योंकि जैसे-जैसे हम नए-नए Variables Register प्रकार के Declare करते जाते हैं, हमारे पुराने Variables auto प्रकार के होते जाते हैं। किसी Variable को Register प्रकार का Declare करने के लिए हम register Keyword का निम्नानुसार प्रयोग कर सकते हैं:

register int num;

इस तरह से C Language में कुल चार प्रकार की Storage Class होती है, जिन्‍हें इस Post में विस्‍तार से Discuss किया गया है और उम्‍मीद है, कि ये Post आपके लिए उपयोगी रहा होगा, जो हमारी EBooks “C Programming Language in Hindi” से लिया गया है।

Recursive Function in C - Explained with Factorial Program
What is Pointer in C

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।