एक छोटी सी पृष्ठभूमि:
के रूप में अन्य लोगों ने बताया है, स्थैतिक चर आंतरिक संबंध है, जिसका अर्थ है कि वे केवल एक ही "संकलन इकाई" या स्रोत फ़ाइल में इस्तेमाल किया जा सकता है कर रहे हैं। इसका मतलब है कि आप इसे हेडर फ़ाइल में घोषित नहीं कर सकते हैं, इसे एक संकलन इकाई में मान निर्दिष्ट करें, और उस मान को दूसरे में दिखाई देने की अपेक्षा करें।
जब आप वैश्विक चर (स्थिर या नहीं) प्रारंभ करते हैं, तो कंपाइलर केवल वैरिएबल के लिए आवंटित स्मृति स्थान पर प्रारंभिक मान निष्पादन योग्य फ़ाइल में डालता है। दूसरे शब्दों में, यह हमेशा प्रारंभिक मूल्य है। निस्संदेह आप असाइनमेंट स्टेटमेंट का उपयोग करके बाद में मूल्य को ओवरराइड कर सकते हैं।
सुझाव:
तुम सच में संकलन समय पर चर के मूल्य को नहीं जानते हैं, तो आप यह गतिशील अपने प्रारंभ समारोह में आवंटित करने चाहिए।
static some_type some_variable; /* = 0 by default */
/* some code */
void MyInitializations()
{
some_variable = some_value;
}
आप एक ही स्थान में चर घोषित करने के लिए चाहते हैं, एक हेडर फाइल कहते हैं, और एक स्रोत फ़ाइल में परिभाषित है, तो आप एक 'निर्वासन' घोषणा जो संकलक बताता है का उपयोग करना चाहिए जहां के बारे में चिंता नहीं करने के लिए परिवर्तनीय है। लिंकर को चर के स्थान को बहुत अधिक मिलेगा जैसे कि यह किसी अन्य फ़ाइल में फ़ंक्शन पाता है और पता भरता है।
हैडर:
extern some_type some_variable;
स्रोत फ़ाइल 1:
void UseSomeVariable()
{
x = some_variable;
}
स्रोत फ़ाइल 2:
some_type some_variable = some_value;
/* possible also uses some_variable */
तुम सिर्फ एक ही स्थान पर चर घोषित करने और में यह निर्धारित करना चाहते हैं दूसरा, 'स्थैतिक' कीवर्ड का उपयोग न करें। इसका नकारात्मक पक्ष यह है कि आप विभिन्न संकलन इकाइयों (.c फ़ाइलों) में एक ही वैश्विक चर का उपयोग नहीं कर सकते हैं और आप इसे हेडर फ़ाइल में उपयोग नहीं कर सकते हैं।
स्थैतिक मतलब संकलन समय पर लोड किया गया है। आप इसे क्यों शुरू नहीं करना चाहते हैं? – Woot4Moo
Woot4Moo: सी में एक वैश्विक चर 'static' बनाना मतलब है कि यह वर्तमान "संकलन इकाई" के बाहर दिखाई नहीं देता है, आमतौर पर एक .c फ़ाइल और उसके सभी शीर्षलेख। सभी वैश्विक चर जो 'extern'd नहीं हैं संकलन-समय पर स्थान आवंटित किए जाते हैं। – Anton