https://www.rakeshmgs.in/search/label/Template
https://www.rakeshmgs.in

Hindi Notes

RakeshMgs

C Language me Storage Classes kya hai | Auto, External, Static, Register Storage class

बुधवार, फ़रवरी 24, 2021

Storage classes in C

एक storage class variables और functions का scope और lifetime define करती है। Basically ये एक keyword होता है जो की variable या function के declaration से पहले यूज़ किया जाता है। ये keyword उस variable या function के काम करने के तरीके को बदल देता है।

C language आपको 4 storage classes provide करती है।

  1. Auto storage class
  2. External storage class
  3. Static storage class
  4. Register storage class

Auto storage class

C की auto storage class सभी local variables के लिए default class मानी जाती है। जब भी आप कोई local variable create करते है और उसके साथ कोई दूसरी storage class define नहीं करते है तो वह by default (automatically) auto storage class को belong करता है।

इस तरह के variables को automatic variables भी कहा जाता है। इन्हें दर्शाने के लिए आप चाहे तो auto keyword भी यूज़ कर सकते है। आप auto keyword को सिर्फ किसी functions के अंदर ही यूज़ कर सकते है। जब भी function call होता है तो ये variables create होते है और function के exit होने के साथ ही ये destroy हो जाते है।

    
#include <stdio.h> void main() { int detail; // or auto int details;//Both are same }

ऊपर define किये गए दोनों variables ही auto storage class को belong करते है।

Extern Storage Class

कई बार ऐसा होता है की आप किसी बड़े project पर काम कर रहे हो तो आपको एक से अधिक program files को handle करना पड़ता है। ऐसी situation में extern storage class बहुत ही helpful होती है।

मान लीजिये आपने एक program file में एक variable declare किया है। ये variable एक global variable है। अब आप इस variable को इसी project की किसी दूसरी program file में यूज़ करना चाहते है तो आप extern keyword का यूज़ करते है।

Basically extern keyword compiler को बताता है की ये variable पहले ही किसी class में create किया जा चूका है और आप इसे इस program file में यूज़ करने वाले है। ये keyword पहले से create किये गए किसी variable या function का reference देता है।

    
#include <stdio.h> int number;// global variable void main() {number = 10; printf("I am in main function. My value is %d\n", number); fun1(); //function calling, discussed in next topic fun2(); //function calling, discussed in next topic } /* This is function 1 */ fun1() { number = 20; printf("I am in main fun1. My value is %d", number); } /* This is function 1 */ fun2() { printf("\nI am in function fun2. My value is %d", number); }

output

I am in function main. My value is 10
I am in function fun1. My value is 20
I am in function fun2. My value is 20

Static Storage Class

Static storage class compiler को बताती है की variable program के end तक consistent रहेगा। यँहा पर consistent से मेरा मतलब की variable बार बार create और destroy नहीं होगा।

मान लीजिये आपने function के अंदर एक variable create किया है। जब भी आप इस function को call करते है तो ये variable create होता है और function के end होने के साथ ही ये destroy हो जाता है।

यानि यदि आप function को call करके उस variable में कोई changes करते है तो function exit होने के बाद वो changes भी नहीं रहेंगे। जब आप दुबारा function को call करेंगे तो variable उसकी initial value के साथ create होगा।

लेकिन यदि आप static keyword को यूज़ करते है तो variable पुरे program में सिर्फ एक ही बार create होगा और program के end में destroy होगा। और जितनी भी बार आप variable की value change करेंगे वो changes भी पुरे program के दौरान रहेंगे।

    
#include <stdio.h> //Function declaration (discussed in next topic) void test();voidmain() { test(); test(); test(); } voidtest() { static int a = 0; //a static variable a = a + 1; printf<("%d\t",a); }

output

1 2 3

Register Storage Class

Register storage class ऐसे variables declare करने के लिए यूज़ की जाती है जिन्हें आप RAM की जगह register में store करवाना चाहते है। अकसर ऐसा fast data access के लिए किया जाता है।

एक register computer processor का part होता है जो की small data को hold करता है। लेकिन ये बहुत छोटी value को ही hold कर सकता है। ये RAM से कई गुना तेज होता है।

इसलिए अपने program में आपको जँहा भी तेज data access की requirement हो तो आप इस storage class को यूज़ कर सकते है।

एक बात आपको ये भी ध्यान रखनी चाहिए की जरुरी नहीं की variable को register define करने से ही वो register में save हो जायेगा। ये आपके hardware configuration पर depend करता है।

Syntax :

	
	
register int number;