C में extern क्या है? ग्लोबल वेरिएबल्स और हेडर फ़ाइलों के साथ पूर्ण गाइड

1. extern क्या है?

C भाषा में, extern एक कीवर्ड है जो संकेत देता है कि आप किसी वैरिएबल या फ़ंक्शन को “उधार” ले रहे हैं जो किसी अन्य फ़ाइल में परिभाषित है। उदाहरण के लिए, यदि आप एक फ़ाइल में परिभाषित ग्लोबल वैरिएबल को दूसरी फ़ाइल से उपयोग करना चाहते हैं, तो आप extern का उपयोग करेंगे। जब प्रोग्राम कई फ़ाइलों में विभाजित होता है, तो extern डेटा को उनके बीच साझा करने में मदद करता है।

इसे इस तरह समझें: आपका प्रोग्राम एक घर है जिसमें कई कमरे हैं, और extern एक “उधार समझौता” की तरह है जो आपको पड़ोसी कमरे से कोई उपकरण उपयोग करने देता है। इसका मतलब है, “यह वस्तु यहाँ नहीं है, लेकिन आप इसे किसी अन्य फ़ाइल में पा सकते हैं।”

उदाहरण

// file1.c
int g_data = 100;

// file2.c
extern int g_data;
void printData() {
    printf("%dn", g_data);  // Accesses g_data defined in file1.c
}

इस उदाहरण में, g_data को file1.c में परिभाषित किया गया है, और extern का उपयोग करके file2.c उस वैरिएबल तक पहुँच सकता है।

2. extern और ग्लोबल वैरिएबल्स के बीच संबंध

extern ग्लोबल वैरिएबल्स से घनिष्ठ रूप से जुड़ा हुआ है। एक ग्लोबल वैरिएबल, एक बार परिभाषित होने के बाद, प्रोग्राम की किसी भी फ़ाइल से एक्सेस किया जा सकता है। हालांकि, अन्य फ़ाइलों को इसके अस्तित्व के बारे में स्वचालित रूप से पता नहीं चलता। यहीं पर extern काम आता है — यह अन्य फ़ाइलों को बताता है, “अरे, यह वैरिएबल कहीं और मौजूद है!”

एक महत्वपूर्ण बात यह है: extern केवल एक घोषणा है, परिभाषा नहीं। यह मेमोरी आवंटित नहीं करता। वैरिएबल की वास्तविक मेमोरी उस मूल फ़ाइल में आवंटित होती है जहाँ इसे परिभाषित किया गया है।

ग्लोबल वैरिएबल का उदाहरण

// file1.c
int counter = 0;

// file2.c
extern int counter;  // Refers to counter defined in another file
void incrementCounter() {
    counter++;  // Updates the value of counter
}
年収訴求

3. हेडर फ़ाइलों में extern का उपयोग

बड़े प्रोजेक्ट्स में, हर फ़ाइल में वैरिएबल या फ़ंक्शन की घोषणा बार‑बार करना थकाऊ हो सकता है। यहीं पर हेडर फ़ाइलें काम आती हैं। एक हेडर फ़ाइल वह केंद्रीकृत स्थान है जहाँ वह जानकारी रखी जाती है जिसे कई फ़ाइलों में साझा करने की आवश्यकता होती है। हेडर फ़ाइल में extern घोषणाएँ रखकर आप अन्य फ़ाइलों को वही ग्लोबल वैरिएबल या फ़ंक्शन उपयोग करने में आसान बनाते हैं।

आप हेडर फ़ाइल को पूरे प्रोजेक्ट के लिए एक “टूलबॉक्स” के रूप में सोच सकते हैं। यह साझा टूल्स को एक जगह इकट्ठा करता है, ताकि अन्य फ़ाइलें इसे शामिल करके अपनी ज़रूरत के अनुसार उपयोग कर सकें।

हेडर फ़ाइल का उदाहरण

// globals.h
extern int global_variable;
void printGlobalVariable();

// file1.c
#include "globals.h"
int global_variable = 10;

// file2.c
#include "globals.h"
void printGlobalVariable() {
    printf("%dn", global_variable);
}

4. extern के साथ सामान्य गलतियाँ

extern का उपयोग करते समय कुछ महत्वपूर्ण बिंदुओं का ध्यान रखना आवश्यक है। उदाहरण के लिए, आप extern के साथ वैरिएबल को इनिशियलाइज़ नहीं कर सकते। ऐसा इसलिए है क्योंकि extern केवल एक घोषणा है — परिभाषा नहीं। साथ ही, यदि आप किसी फ़ाइल में extern के साथ वैरिएबल घोषित करते हैं जहाँ वास्तविक परिभाषा मौजूद नहीं है, तो प्रोग्राम लिंकिंग त्रुटि देगा।

सामान्य गलती

extern int data = 100;  // Initialization is not allowed here

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

5. extern के व्यावहारिक उपयोग केस

extern बड़े‑पैमाने के प्रोजेक्ट्स में विशेष रूप से उपयोगी है। उदाहरण के लिए, कई मॉड्यूल वाले प्रोग्रामों में आप साझा डेटा या फ़ंक्शन को extern के साथ घोषित कर सकते हैं, और उन्हें विभिन्न फ़ाइलों में पुनः उपयोग कर सकते हैं।

यह दृष्टिकोण आपके प्रोग्राम में मॉड्यूलरिटी को बढ़ावा देता है, जिससे कोडबेस को बनाए रखना और समझना आसान हो जाता है। प्रत्येक फ़ाइल स्वतंत्र रूप से कार्य कर सकती है जबकि आवश्यक डेटा को extern घोषणाओं के माध्यम से साझा करती रहती है।

व्यावहारिक उदाहरण

// main.c
#include "globals.h"

int main() {
    printGlobalVariable();  // Calls a function defined in another file
    return 0;
}

// globals.c
#include "globals.h"
int global_variable = 100;

void printGlobalVariable() {
    printf("%dn", global_variable);  // Prints the global variable
}

इस लेख में extern की बुनियादी बातों से लेकर व्यावहारिक उपयोग तक सब कुछ कवर किया गया है। यह समझना कि extern कैसे काम करता है, C प्रोग्रामिंग में कोड को विभाजित करने और पुन: उपयोग करने के लिए आवश्यक है।