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

C में ग्लोबल वेरिएबल की रीडिक्लेरेशन

ग्लोबल वेरिएबल रीडिक्लेरेशन

यहां हम देखेंगे कि 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 आवश्यक है
  1. - पायथन में नेमस्पेसेस और स्कोपिंग

    वेरिएबल्स नाम (आइडेंटिफायर्स) हैं जो ऑब्जेक्ट्स से मैप होते हैं। एक नेमस्पेस वेरिएबल नामों (कीज़) और उनके संबंधित ऑब्जेक्ट्स (मानों) का डिक्शनरी है। एक पायथन स्टेटमेंट लोकल नेमस्पेस और ग्लोबल नेमस्पेस में वेरिएबल्स को एक्सेस कर सकता है। यदि किसी लोकल और ग्लोबल वेरिएबल का नाम समान है, तो लोकल वेरिए

  1. - पायथन प्रोग्राम में ग्लोबल कीवर्ड

    कभी-कभी हम एक वेरिएबल घोषित करते हैं लेकिन हमें उसके मान को इसकी घोषणा के वर्तमान स्कोप के बाहर संशोधित या एक्सेस करने की आवश्यकता हो सकती है जो वर्तमान प्रोग्राम में कहीं भी हो सकता है। ऐसे परिदृश्य में, हम उस फ़ंक्शन के अंदर वेरिएबल नाम के साथ ग्लोबल कीवर्ड का उपयोग करते हैं जहां वेरिएबल घोषित किय

  1. - पायथन में ग्लोबल कीवर्ड

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