2011-01-02 8 views
32

संभव डुप्लिकेट:
What does “static” mean in a C program?क्या करता है एएनएसआई-सी में स्थिर मतलब

क्या static कीवर्ड सी में क्या मतलब है?

मैं एएनएसआई-सी का उपयोग कर रहा हूं। मैंने कई कोड उदाहरणों में देखा है, वे चर के सामने और कार्यों के सामने static कीवर्ड का उपयोग करते हैं। एक चर के साथ उपयोग करने के मामले में उद्देश्य क्या है? और फ़ंक्शन के साथ उपयोग करने के मामले में क्या उद्देश्य है?

+0

मैंने किया, लेकिन सही उद्देश्य को समझना मुश्किल था। मैं चर के साथ उपयोग करने के बारे में थोड़ा समझ सकता है। लेकिन समारोह के साथ उपयोग करें? – Sency

+1

आपको यह मिला: http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program –

+1

... या यह: http://stackoverflow.com/questions/943280/ अंतर-इन-सी-और-स्टेटिक-इन-सी –

उत्तर

57

बस एक संक्षिप्त जवाब के रूप में, वहाँ static कीवर्ड के लिए दो प्रयोगों जब चर को परिभाषित कर रहे हैं:

1- चर static कीवर्ड के साथ फ़ाइल दायरे में परिभाषित, यानी परिभाषित बाहर कार्यों केवल कि में दिखाई देते रहेंगे फ़ाइल। अन्य फ़ाइलों से उन्हें एक्सेस करने का कोई भी प्रयास लिंक समय पर अनसुलझे प्रतीक होगा।

2- एक समारोह के भीतर एक ब्लॉक के अंदर static के रूप में परिभाषित चर एक ही कोड ब्लॉक के विभिन्न आमंत्रणों में बने रहेंगे या "जीवित रहेंगे"। यदि उन्हें प्रारंभिक परिभाषित किया गया है, तो वे केवल एक बार शुरू होते हैं। static चर आमतौर पर 0 पर डिफ़ॉल्ट रूप से प्रारंभ होने की गारंटी दी जाती है।

+8

के बारे में अंतर: कार्यों के लिए स्थिर भी लागू किया जा सकता है, उन्हें बाहर भी छुपाया जा सकता है। – datenwolf

+6

यह इस प्रश्न के अन्य अवतारों में कहा गया है, लेकिन Google से आने वाले लोगों के लिए, सख्ती से बोलना 1 संकलन इकाइयों पर लागू नहीं होता है। – Jared

+0

@ रॉक्स परेशानी: "अगर उन्हें परिभाषित किया गया है" इसका क्या अर्थ है? यदि उन्हें परिभाषित किए जाने पर गैर-शून्य मान के साथ प्रारंभ किया गया है? – moonman239

30

static किसी फ़ंक्शन के शरीर के भीतर, यानी एक परिवर्तनीय स्टोरेज क्लासिफायरफायर के रूप में उपयोग किया जाता है, तो उस चर को फ़ंक्शन कॉल के बीच अपने मान को बनाए रखने के लिए बनाता है - कोई भी कह सकता है कि फ़ंक्शन के भीतर एक स्थिर चर केवल उस फ़ंक्शन पर वैश्विक चर दिखाई देता है । static का यह उपयोग हमेशा उस फ़ंक्शन को बनाता है जिसका उपयोग थ्रेड असुर में किया जाता है, आपको इससे बचना चाहिए।

अन्य उपयोग केस वैश्विक दायरे पर static का उपयोग कर रहा है, यानि वैश्विक चर और कार्यों के लिए: स्थैतिक कार्य और वैश्विक चर संकलन इकाई के लिए स्थानीय हैं, यानी वे संकलित बाइनरी की निर्यात तालिका में दिखाई नहीं देते हैं वस्तु। वे इस प्रकार नामस्थान को प्रदूषित नहीं करते हैं। प्रश्न में संकलन इकाई (यानी सी फाइल) के बाहर से सभी पहुंचने के लिए स्थैतिक सभी कार्यों और वैश्विक चर को घोषित करना एक अच्छा विचार है! बस जागरूक रहें कि स्थिर चर को हेडर फ़ाइलों में नहीं रखा जाना चाहिए (मुझे बहुत दुर्लभ विशेष मामलों को छोड़कर)।