Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम में स्टोरेज क्लासेस


वेरिएबल्स और डेटा टाइप्स पर ऊपर चर्चा की गई है। अब हम देखेंगे कि वेरिएबल्स को उनके स्कोप और विजिबिलिटी के आधार पर कैसे वर्गीकृत किया जा सकता है।

मुख्य अवधारणाएं

  • स्कोप (Scope): आमतौर पर, स्कोप एक ऐसा शब्द है जो वेरिएबल के जीवनकाल को दर्शाता है। यह कब तक काम करेगा और कब नष्ट होगा।
  • विजिबिलिटी (Visibility): विजिबिलिटी दर्शाता है कि वेरिएबल कहां से विजिबल है, हम वेरिएबल्स का उपयोग कहां कर सकते हैं। उदाहरण के लिए यदि हम लोकल वेरिएबल्स का उपयोग करते हैं तो हम इसे अन्य फंक्शन्स या फाइल्स से उपयोग नहीं कर सकते, इसलिए यह केवल ब्लॉक के अंदर विजिबल होता है।
  • ब्लॉक (Block): ब्लॉक को दो कर्ली ब्रेसेस {...} के बीच की लाइनों के सेट के रूप में परिभाषित किया जाता है।

स्टोरेज क्लासेस तालिका

स्टोरेज क्लास कैसे घोषित स्कोप विजिबिलिटी
autoग्लोबली——
autoलोकलीब्लॉकब्लॉक
registerग्लोबली——
registerलोकलीब्लॉकब्लॉक
staticग्लोबलीप्रोग्रामफाइल
staticलोकलीप्रोग्रामब्लॉक
externग्लोबलीप्रोग्रामप्रोग्राम
externलोकलीप्रोग्रामब्लॉक

स्टोरेज क्लास के लिए बेसिक सिंटैक्स:

<storage class> <datatype> variable_name;
उदाहरण: static int my_var = 0;

नोट: यदि हम <datatype> variable_name; की तरह बिना किसी स्टोरेज क्लास को निर्दिष्ट किए उपयोग करते हैं, तो यह स्वचालित रूप से 'auto' स्टोरेज क्लास होगा।

Auto

Auto स्टोरेज क्लास सभी लोकल वेरिएबल्स के लिए डिफॉल्ट स्टोरेज क्लास है।

{
    int mount;
    auto int month;
}

उपरोक्त उदाहरण एक ही स्टोरेज क्लास में दो वेरिएबल्स को परिभाषित करता है। 'auto' का उपयोग केवल फंक्शन्स के भीतर किया जा सकता है, यानी लोकल वेरिएबल्स।

Register

Register स्टोरेज क्लास का उपयोग लोकल वेरिएबल्स को परिभाषित करने के लिए किया जाता है जिन्हें RAM के बजाय रजिस्टर में स्टोर किया जाना चाहिए। इसका मतलब है कि वेरिएबल का अधिकतम आकार रजिस्टर आकार के बराबर होता है (आमतौर पर एक शब्द) और इस पर यूनरी '&' ऑपरेटर लागू नहीं किया जा सकता (क्योंकि इसकी कोई मेमोरी लोकेशन नहीं होती)।

{
    register int miles;
}

Register का उपयोग केवल उन वेरिएबल्स के लिए किया जाना चाहिए जिन्हें त्वरित एक्सेस की आवश्यकता होती है जैसे काउंटर्स। यह भी ध्यान दिया जाना चाहिए कि 'register' को परिभाषित करने का मतलब यह नहीं है कि वेरिएबल रजिस्टर में स्टोर होगा। इसका मतलब है कि यह हार्डवेयर और कार्यान्वयन प्रतिबंधों के आधार पर रजिस्टर में स्टोर हो सकता है।

Static

Static स्टोरेज क्लास कंपाइलर को निर्देश देता है कि लोकल वेरिएबल को प्रोग्राम के जीवनकाल के दौरान अस्तित्व में रखे बजाय इसे हर बार बनाने और नष्ट करने के जब यह स्कोप में आता और जाता है। इसलिए, लोकल वेरिएबल्स को static बनाने से वे फंक्शन कॉल्स के बीच अपने मानों को बनाए रख सकते हैं।

Static मॉडिफायर को ग्लोबल वेरिएबल्स पर भी लागू किया जा सकता है। जब ऐसा किया जाता है, तो यह उस वेरिएबल के स्कोप को उस फाइल तक सीमित कर देता है जिसमें यह घोषित है।

C प्रोग्रामिंग में, जब ग्लोबल वेरिएबल पर static उपयोग किया जाता है, तो यह उस क्लास के सभी ऑब्जेक्ट्स द्वारा उस सदस्य की केवल एक कॉपी को साझा करने का कारण बनता है।

उदाहरण कोड

#include <stdio.h>
/* फंक्शन घोषणा */
void func(void);
static int count = 5; /* ग्लोबल वेरिएबल */

main() {
    while(count--) {
        func();
    }
    return 0;
}

/* फंक्शन परिभाषा */
void func(void) {
    static int i = 5; /* लोकल स्टेटिक वेरिएबल */
    i++;
    printf("i is %d and count is %d\n", i, count);
}

आउटपुट

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

Extern

Extern स्टोरेज क्लास का उपयोग एक ग्लोबल वेरिएबल का रेफरेंस देने के लिए किया जाता है जो सभी प्रोग्राम फाइल्स के लिए विजिबल होता है। जब आप 'extern' उपयोग करते हैं, तो वेरिएबल को इनिशियलाइज़ नहीं किया जा सकता, हालांकि यह वेरिएबल नाम को उस स्टोरेज लोकेशन पर इंगित करता है जिसे पहले से परिभाषित किया गया है।

जब आपके पास कई फाइल्स होती हैं और आप एक ग्लोबल वेरिएबल या फंक्शन परिभाषित करते हैं, जिसका उपयोग अन्य फाइल्स में भी किया जाएगा, तो extern का उपयोग दूसरी फाइल में परिभाषित वेरिएबल या फंक्शन का रेफरेंस प्रदान करने के लिए किया जाएगा। समझने के लिए, extern का उपयोग दूसरी फाइल में ग्लोबल वेरिएबल या फंक्शन को घोषित करने के लिए किया जाता है।

Extern मॉडिफायर का उपयोग सबसे अधिक तब किया जाता है जब दो या अधिक फाइल्स समान ग्लोबल वेरिएबल्स या फंक्शन्स साझा कर रही होती हैं जैसा कि नीचे बताया गया है।

उदाहरण कोड (main.c):

#include <stdio.h>
int count;
extern void write_extern();

main() {
    count = 5;
    write_extern();
}

उदाहरण कोड (support.c):

#include <stdio.h>
extern int count;

void write_extern(void) {
    printf("count is %d\n", count);
}

आउटपुट

count is 5
  1. - C# में एब्स्ट्रैक्ट क्लासेस

    C# में एक एब्स्ट्रैक्ट क्लास में एब्स्ट्रैक्ट और नॉन-एब्स्ट्रैक्ट दोनों मेथड्स शामिल होते हैं। एक क्लास को एब्स्ट्रैक्ट घोषित किया जाता है ताकि वह एब्स्ट्रैक्ट क्लास बन सके। आप एब्स्ट्रैक्ट क्लास को इंस्टेंटिएट नहीं कर सकते। आइए एक उदाहरण देखें, जहाँ हमारे पास एक एब्स्ट्रैक्ट क्लास Vehicle और एब्स

  1. - मल्टी-इनहेरिटेंस Python क्लास में क्लास वेरिएबल कैसे काम करते हैं?

    Python में एक क्लास एक से अधिक बेस क्लास से डेराइव हो सकती है। इसे मल्टीपल इनहेरिटेंस कहा जाता है। मल्टीपल इनहेरिटेंस में, सभी बेस क्लास की विशेषताएं डेराइव्ड क्लास में इनहेरिट होती हैं। मल्टीपल इनहेरिटेंस का सिंटैक्स सिंगल इनहेरिटेंस के समान है। class Super1: pass class Super2: pass class M

  1. प्रोग्रामिंग में क्लासेस का महत्व: कोड व्यवस्थित करना और अमूर्तता बढ़ाना प्रोग्रामिंग में क्लासेस का महत्व: कोड व्यवस्थित करना और अमूर्तता बढ़ाना

    मेरे पिछले लेख के बाद, हम nil का उपयोग क्यों करते हैं, मुझे लगा कि अन्य चीजों के लिए भी यह सवाल पूछना एक अच्छा विचार होगा जिन्हें हम स्वाभाविक मान लेते हैं। जैसे… हम केवल एक विशाल बदसूरत कोड के ब्लॉब के बजाय क्लासेस का उपयोग क्यों करते हैं? एक मौलिक स्तर पर, हम कोड और डेटा को तार्किक इकाइयों में व्य