मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है।अनुवाद इकाई में `स्थिर 'परिभाषा और' बाहरी घोषणा 'का आदेश
extern int i;
int main()
{
printf(" %d ", i);
}
static int i =3;
इसके अलावा, इस काम नहीं करता है:
extern int i;
static int i =3;
int main()
{
printf(" %d ", i);
}
लेकिन अगर static
चर extern declaration
से पहले परिभाषित किया गया है यह काम करता है:
static int i =3;
extern int i;
int main()
{
printf(" %d ", i);
}
मैं extern int i
से समझने के रूप में बताता है i
है कि वर्तमान कहीं और और यहां यह कैसा दिखता है (int i
)
लेकिन, कहीं और साधन:
1) हो सकता है, एक global variable
रूप same
अनुवाद इकाई में बाद में बात।
2) शायद, other
अनुवाद इकाई में।
मैं सोच रहा था कि (1)
मान्य होगा, भले ही static int i = 3
ने वर्तमान अनुवाद इकाई को i
के दायरे को प्रतिबंधित कर दिया है, जहां इसे परिभाषित किया गया है।
static int i =3
global
(मेरा मतलब है कि यह अनुवाद इकाई में कम से कम दिखाई देता है) यहां तक कि इसके अनुवाद इकाई के लिए सीमित दायरा है? तो संकलक इसे खोजने में असमर्थ क्यों नहीं है?
जब मैं पहली बार दो संस्करणों मैं निम्नलिखित संकलन समय त्रुटि मिलती संकलन:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
मैं यह त्रुटि संदेश को समझने में असमर्थ हूँ। साथ ही, यह एक स्थिर declaration
के रूप में क्यों शिकायत कर रहा है यह definition
भी नहीं है?
वास्तव में "काम नहीं करता" क्या है? क्या यह एक संकलन मुद्दा है? रनटाइम मुद्दा? मैं वीएस 2010 के साथ अपना कोड संकलित कर रहा हूं और ऐसा लगता है कि यह ठीक से काम कर रहा है। – Nbr44
जीसीसी कॉमप्लर, मुझे एक संकलन समय त्रुटि स्थिर स्थिरता मिलती है, मैं गैर स्थैतिक घोषणा का पालन करता हूं। –