ग्लोबल वेरिएबल रीडिक्लेरेशन
यहां हम देखेंगे कि C में ग्लोबल वेरिएबल्स की री-डिक्लेरेशन क्या है। क्या C इसका समर्थन करता है या नहीं। आइए विचार प्राप्त करने के लिए निम्नलिखित कोड देखें।
उदाहरण 1: लोकल वेरिएबल रीडिक्लेरेशन (अनुमत नहीं)
#include <stdio.h>
int main() {
int a;
int a = 50; // त्रुटि: एक ही स्कोप में रीडिक्लेरेशन
printf("a is: %d\n", a);
return 0;
}
आउटपुट
[Error] redeclaration of 'a' with no linkage
तो हम देख सकते हैं कि हम लोकल वेरिएबल्स को रीडिक्लेयर नहीं कर सकते।
उदाहरण 2: ग्लोबल वेरिएबल - अनइनिशियलाइज़्ड रीडिक्लेरेशन (अनुमत)
#include <stdio.h>
int a; // डिक्लेरेशन (टेंटेटिव डेफिनिशन)
int a = 50; // डेफिनिशन विथ इनिशियलाइज़र
int main() {
printf("a is: %d\n", a);
return 0;
}
आउटपुट
a is: 50
तो ग्लोबल वेरिएबल्स इस मामले में कोई त्रुटि नहीं पैदा करते।
उदाहरण 3: ग्लोबल वेरिएबल - डबल इनिशियलाइज़ेशन (अनुमत नहीं)
#include <stdio.h>
int a = 10; // डेफिनिशन विथ इनिशियलाइज़र
int a = 50; // त्रुटि: रीडेफिनिशन
int main() {
printf("a is: %d\n", a);
return 0;
}
आउटपुट
[Error] redefinition of 'a'
निष्कर्ष
हम केवल ग्लोबल वेरिएबल्स को रीडिक्लेयर कर सकते हैं जब वे **इनिशियलाइज़्ड नहीं** होते हैं।
तकनीकी व्याख्या
int a;(ग्लोबल स्कोप पर) एक **टेंटेटिव डेफिनिशन** है - यह एक डिक्लेरेशन की तरह व्यवहार करता है जो डेफिनिशन बन सकता है यदि कोई अन्य डेफिनिशन नहीं मिलताint a = 50;एक **डेफिनिशन विथ इनिशियलाइज़र** है- एक ही ट्रांसलेशन यूनिट में कई टेंटेटिव डेफिनिशन्स अनुमत हैं
- केवल एक डेफिनिशन विथ इनिशियलाइज़र अनुमत है
- यदि एक से अधिक डेफिनिशन विथ इनिशियलाइज़र हैं → रीडेफिनिशन एरर
वैध पैटर्न्स
// वैध: एकाधिक टेंटेटिव डेफिनिशन्स int a; int a; int a = 10; // ठीक: केवल एक इनिशियलाइज़र // अवैध: एकाधिक इनिशियलाइज़र्स int a = 10; int a = 20; // त्रुटि: redefinition // हेडर फाइल्स में: extern का उपयोग करें // header.h: extern int global_var; // source1.c: int global_var = 0; // डेफिनिशन // source2.c: #include "header.h" // केवल डिक्लेरेशन
C++ में अंतर
C++ में नियम सख्त हैं:
- ग्लोबल स्कोप पर
int a;एक **डेफिनिशन** है (टेंटेटिव नहीं) int a; int a;C++ में रीडेफिनिशन एरर है- C++ में हेडर फाइल्स के लिए
externआवश्यक है