C प्रोग्रामिंग भाषा में चार स्टोरेज क्लास हैं:
- auto
- extern
- static
- register
ग्लोबल/एक्सटर्नल वेरिएबल्स
कीवर्ड: extern। ये वेरिएबल्स ब्लॉक के बाहर घोषित होते हैं।
- स्कोप - पूरे प्रोग्राम में उपलब्ध।
- डिफ़ॉल्ट मान - शून्य (0)।
एल्गोरिदम
START Step 1: एक्सटर्न वेरिएबल घोषित और आरंभ करें Step 2: इंट वेरिएबल a=3 घोषित और आरंभ करें Step 3: a प्रिंट करें Step 4: फंक्शन कॉल करें Step 5: कॉल्ड फंक्शन a प्रिंट करता है (एक्सटर्न वेरिएबल का मान लेता है)
उदाहरण 1: एक ही फाइल में एक्सटर्न
extern int a = 5; // यह 'a' पूरे प्रोग्राम के लिए उपलब्ध है
int main() {
int a = 3; // यह 'a' केवल main में वैध है (लोकल)
printf("%d ", a); // प्रिंट: 3
fun();
return 0;
}
void fun() {
printf("%d", a); // प्रिंट: 5 (ग्लोबल एक्सटर्न)
}
आउटपुट
3 5
व्याख्या: main में लोकल a=3 ग्लोबल a=5 को छुपा देता है (शैडोइंग)। fun() में कोई लोकल a नहीं है, इसलिए यह ग्लोबल a=5 एक्सेस करता है।
उदाहरण 2: मल्टीपल फाइल्स में एक्सटर्न
External.h
extern int a = 14; extern int b = 8;
externstorage.c
#include <stdio.h>
#include "External.h"
int main() {
int sub = a - b;
printf("%d - %d = %d", a, b, sub);
return 0;
}
आउटपुट
14 - 8 = 6
मुख्य बिंदु
- extern अन्य फाइल्स में परिभाषित वेरिएबल/फंक्शन की घोषणा करता है (परिभाषा नहीं)।
- यह लिंकर को बताता है: "यह वेरिएबल कहीं और परिभाषित है, उसका पता ढूंढो।"
- एक फाइल में परिभाषा (
int a = 10;), अन्य फाइल्स में घोषणा (extern int a;)। - फंक्शन के लिए भी उपयोग होता है:
extern void myFunc();(वैकल्पिक, फंक्शन डिफ़ॉल्ट रूप से extern होते हैं)।
सामान्य गलती
// File1.c int x = 10; // परिभाषा // File2.c extern int x = 20; // गलत! यह पुनर्परिभाषा है // सही: extern int x; // केवल घोषणा
सारांश
| स्टोरेज क्लास | स्कोप | लाइफटाइम | डिफ़ॉल्ट मान |
|---|---|---|---|
| extern | ग्लोबल (सभी फाइल्स) | प्रोग्राम अवधि | 0 |
| static (ग्लोबल) | फाइल-लोकल | प्रोग्राम अवधि | 0 |