वैश्विक चर (static
नहीं) जब आप .o
फ़ाइल को अन्य फ़ाइलों में उपयोग के लिए लिंकर पर उपलब्ध कराते हैं तो वहां होते हैं। इसलिए, अगर आप इस तरह दो फ़ाइलों है, तो आप नाम टक्कर a
पर मिलता है:
एसी:
#include <stdio.h>
int a;
int compute(void);
int main()
{
a = 1;
printf("%d %d\n", a, compute());
return 0;
}
BC:
int a;
int compute(void)
{
a = 0;
return a;
}
क्योंकि लिंकर पता नहीं है वैश्विक का जो a
रों उपयोग करने के लिए।
हालांकि, जब आप स्थैतिक ग्लोबल्स को परिभाषित करते हैं, तो आप संकलक को केवल उस फ़ाइल के लिए चर रखने के लिए कह रहे हैं और लिंकर को इसके बारे में जानकारी न दें। तो अगर आप दो नमूना कोड मैंने लिखा करने के लिए (a
की परिभाषा में) static
जोड़ने के लिए, आप नाम टकराव नहीं मिलेगा क्योंकि लिंकर भी पता नहीं है वहाँ फ़ाइलों में से किसी में एक a
:
एसी:
#include <stdio.h>
static int a;
int compute(void);
int main()
{
a = 1;
printf("%d %d\n", a, compute());
return 0;
}
BC:
static int a;
int compute(void)
{
a = 0;
return a;
}
कि प्रत्येक फ़ाइल अन्य लोगों के बारे में जानने के बिना अपने स्वयं के a
साथ काम करता है इसका मतलब यह है।
एक तरफ ध्यान दें के रूप में, यह उन्हें static
में से एक और अन्य नहीं जब तक कि वे अलग अलग फ़ाइलों में हैं के लिए ठीक है। यदि दो घोषणाएं एक ही फ़ाइल में हैं (अनुवाद इकाई पढ़ें), एक static
और एक extern
, this answer देखें।
पोस्ट कोड ... – Nawaz
आपको एक उदाहरण है? – glglgl
दोनों चर अलग फ़ाइलों में स्थिर घोषित कर रहे हैं, यह एक नाम टक्कर का कारण नहीं होना चाहिए।मैंने अभी एक त्वरित परीक्षण किया है और यह उम्मीद के अनुसार काम करता है। यदि यह आपके लिए काम नहीं करता है, तो कृपया उस कोड को पोस्ट करें जहां आप उम्मीद करते हैं कि यह काम नहीं करता है, आप क्या उम्मीद करते हैं और आपको क्या मिलता है, और आप किस कंपाइलर का उपयोग कर रहे हैं। – Kevin