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

C भाषा में स्टोरेज क्लासेस (Storage Classes)


स्टोरेज क्लास क्या है?

स्टोरेज क्लास C में चर/फंक्शन के स्कोप (दृश्यता), जीवनकाल (लाइफटाइम), डिफ़ॉल्ट मान और मेमोरी स्थान को परिभाषित करता है।

चार स्टोरेज क्लासेस

क्लासकीवर्डस्कोपजीवनकालडिफ़ॉल्ट मानमेमोरी
ऑटोमैटिकautoब्लॉक (लोकल)ब्लॉक निष्पादन तककचरास्टैक
एक्सटर्नलexternपूरा प्रोग्राम (ग्लोबल)प्रोग्राम अवधिशून्यडेटा सेगमेंट
स्टैटिकstaticब्लॉक (लोकल) या फाइल (ग्लोबल)प्रोग्राम अवधिशून्यडेटा सेगमेंट
रजिस्टरregisterब्लॉक (लोकल)ब्लॉक निष्पादन तककचराCPU रजिस्टर (संकेत)

1. ऑटोमैटिक (auto) - डिफ़ॉल्ट लोकल


void func() {
    auto int x = 10;  // 'auto' वैकल्पिक, डिफ़ॉल्ट है
    // x केवल इस ब्लॉक में दृश्य
}

उदाहरण: नेस्टेड ब्लॉक

#include <stdio.h>

int main() {
    auto int i = 1;
    {
        auto int i = 2;
        {
            auto int i = 3;
            printf("%d ", i);  // 3
        }
        printf("%d ", i);  // 2
    }
    printf("%d\n", i);  // 1
    return 0;
}

आउटपुट: 3 2 1

2. एक्सटर्नल (extern) - ग्लोबल


#include <stdio.h>

int x = 10;  // ग्लोबल परिभाषा

void func() {
    extern int x;  // घोषणा (परिभाषा नहीं)
    printf("func में x: %d\n", x);
}

int main() {
    int x = 20;  // लोकल x, ग्लोबल को छुपाता है
    printf("main में x: %d\n", x);  // 20
    func();       // 10
    return 0;
}

आउटपुट: main में x: 20\nfunc में x: 10

3. स्टैटिक (static)

  • लोकल स्टैटिक: फंक्शन कॉल्स के बीच मान बरकरार रखता है
  • ग्लोबल स्टैटिक: केवल उसी फाइल में दृश्य (इंटरनल लिंकेज)

उदाहरण: लोकल स्टैटिक

#include <stdio.h>

void counter() {
    static int count = 0;  // केवल पहली बार प्रारंभिकृत
    count++;
    printf("कॉल %d\n", count);
}

int main() {
    counter();  // कॉल 1
    counter();  // कॉल 2
    counter();  // कॉल 3
    return 0;
}

आउटपुट: कॉल 1\nकॉल 2\nकॉल 3

उदाहरण: ग्लोबल स्टैटिक


// file1.c
static int privateVar = 42;  // अन्य फाइल्स से अदृश्य

// file2.c
extern int privateVar;  // लिंकर त्रुटि: undefined reference

4. रजिस्टर (register)

  • कंपाइलर को सुझाव: चर को CPU रजिस्टर में रखें (तेज एक्सेस)
  • पता नहीं ले सकते: &var अवैध
  • आधुनिक कंपाइलर स्वयं अनुकूलन करते हैं; register केवल संकेत है
  • लूप काउंटर, बार-बार उपयोग होने वाले चर के लिए

उदाहरण


#include <stdio.h>

int main() {
    register int i;
    for (i = 1; i <= 5; i++)
        printf("%d ", i);
    // printf("%p", &i);  // त्रुटि: रजिस्टर चर का पता नहीं ले सकते
    return 0;
}

आउटपुट: 1 2 3 4 5

सारांश: कब क्या उपयोग करें?

  • auto: सामान्य लोकल चर (डिफ़ॉल्ट, कीवर्ड वैकल्पिक)
  • static: फंक्शन कॉल्स के बीच राज्य बनाए रखने, फाइल-प्राइवेट ग्लोबल
  • extern: बहु-फाइल प्रोजेक्ट में ग्लोबल चर/फंक्शन साझा करना
  • register: प्रदर्शन-महत्वपूर्ण लूप काउंटर (कंपाइलर पर छोड़ें)

स्टोरेज क्लास स्पेसिफायर्स के साथ फंक्शन्स

घोषणाअर्थ
static void f()फाइल-प्राइवेट फंक्शन
extern void f()ग्लोबल फंक्शन (डिफ़ॉल्ट)
inline void f()इनलाइन सुझाव (C99)
  1. C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन

    C भाषा में ऑपरेटर्स का परिचय ऑपरेटर डेटा पर ऑपरेशन करते हैं। इन्हें निम्न श्रेणियों में वर्गीकृत किया गया है: अंकगणितीय ऑपरेटर्स (Arithmetic Operators) संबंधपरक ऑपरेटर्स (Relational Operators) तार्किक ऑपरेटर्स (Logical Operators) असाइनमेंट ऑपरेटर्स (Assignment Operators) इन्क्रीमेंट और डिक्रीमेंट ऑ

  1. C भाषा में खोज तकनीकें (Searching Techniques) C भाषा में खोज तकनीकें (Searching Techniques)

    खोज (Searching) का परिचय खोज तकनीक का अर्थ है किसी सूची में किसी कुंजी तत्व (key element) को ढूंढना। यदि तत्व मिल जाता है तो खोज सफल (successful), अन्यथा असफल (unsuccessful) होती है। C में दो प्रमुख खोज तकनीकें रैखिक खोज (Linear Search) द्विआधारी खोज (Binary Search) 1. रैखिक खोज (Linear Search)

  1. - क्या Python क्लास में "प्राइवेट" वेरिएबल होते हैं?

    Python क्लास में वास्तव में प्राइवेट वेरिएबल जैसी कोई चीज़ नहीं होती। Python में सभी वेरिएबल्स और मेथड्स डिफ़ॉल्ट रूप से पब्लिक होते हैं। कभी-कभी वेरिएबल के नाम के आगे डबल अंडरस्कोर __ प्रीफिक्स लगाकर प्राइवेट वेरिएबल का अनुकरण किया जाता है। इससे ये वेरिएबल उन्हें शामिल करने वाली क्लास के बाहर इनविज