static
कीवर्ड जब फ़ंक्शन परिभाषा के साथ उपयोग किया जाता है तो कहता है कि फ़ंक्शन में फ़ाइल स्तर का दायरा है। इसका मतलब है कि फ़ंक्शन का नाम केवल फ़ाइल के भीतर ही दिखाई देता है। फ़ंक्शन परिभाषा में उपयोग किए गए static
कीवर्ड फ़ंक्शन नाम दृश्यता को संशोधित करता है और फ़ंक्शन रिटर्न प्रकार को संशोधित नहीं करता है।
तो एक फ़ंक्शन घोषित स्थिर किसी भी प्रकार का प्रकार लौटा सकता है।
फ़ंक्शन बॉडी में परिभाषित एक चर पर static
का उपयोग यह इंगित करने के लिए किया जाता है कि चर लोड किया जाता है जब एप्लिकेशन लोड होता है और प्रारंभ होता है। तो यदि आप फ़ंक्शन के भीतर एक चर पर static
संशोधक का उपयोग करते हैं, तो फ़ंक्शन कहलाते समय उस चर को स्टैक पर नहीं बनाया जाता है। यह फ़ंक्शन कहलाता है जब यह स्वतंत्र रूप से मौजूद है। हालांकि चर की दृश्यता केवल फ़ंक्शन के भीतर ही है।
आपके उदाहरण में आपके पास एक ऐसा कार्य है जो static
चर के पते को वापस कर रहा है। आप यह कर सकते हैं हालांकि आपको समझना होगा कि यह उपयोग थ्रेड सुरक्षित नहीं है।दूसरे शब्दों में फ़ंक्शन को कॉल करने वाले सभी थ्रेड समान स्मृति स्थान पर समान वैरिएबल प्राप्त करेंगे, न कि वेरिएबल का अपना संस्करण।
आपको यह भी समझना होगा कि यदि आप static
वैरिएबल का पता वापस लौटते हैं तो आप पुनर्वितरण और पुनरावृत्ति के साथ समस्याएं भी पैदा कर सकते हैं। इसका कारण यह है कि स्टैक पर वेरिएबल्स पुनर्वितरण और पुनरावृत्ति के लिए प्रदान करते हैं क्योंकि प्रत्येक बार फ़ंक्शन कहलाता है, स्टैक में एक नया फ्रेम जोड़ा जाता है, इसलिए प्रत्येक फ़ंक्शन कॉल का अपना स्टैक फ्रेम होता है, इसलिए यह चर का अपना सेट होता है।
इस मानक सी पुस्तकालय जो एक चर इस्तेमाल किया strtok()
समारोह के भीतर की स्ट्रिंग पते के रूप में शून्य का उपयोग कर कॉल के बीच एक राज्य बनाए रखने के लिए वर्ष strtok()
समारोह के साथ एक ज्ञात मुद्दा जहां strtok()
को आखिरी कॉल दूर छोड़ दिया जाता है, जब पार्स करने एक स्ट्रिंग। मैंने एक समस्या देखी है जहां एक स्ट्रिंग को पार्स करने के लिए strtok()
नामक एक फ़ंक्शन कहा जाता है और फिर एक और फ़ंक्शन कहा जाता है जिसे बदले में strtok()
कहा जाता है ताकि एक अलग स्ट्रिंग को पार्स करना शुरू हो सके। नतीजा तब तक कुछ अजीब त्रुटियों और व्यवहार था जब तक कारण निकाला नहीं गया था।
फ़ाइल के भीतर एक वैश्विक चर पर static
संशोधक का उपयोग एक वैश्विक चर बना देगा जो फ़ाइल के भीतर कई कार्यों द्वारा साझा किया जा सकता है। हालांकि फ़ंक्शन नाम पर स्थिर संशोधक का उपयोग करने की तरह, static
चर में केवल फ़ाइल स्कोप दृश्यता होगी।
// .. top of a file of C source code
static int aStaticInt = 0; // a static int that can be shared by all functions in the file but is visible only in the file
int aNonStaticInt = 0; // a non static int that is visible outside of the file
static int myStaticFunc (void)
{
// a function that is visible only within the file
}
int myNonStaticFunc (void)
{
// a function that is visible outside the file as well as inside the file
}
स्रोत
2015-01-30 19:51:53
'स्थिर चार *' एक प्रकार –
नहीं है दरअसल, 'शून्य' अनावश्यक है और कुछ कंपेलरों को तोड़ देता है। –
@ प्रो। फाल्कन, मुझे लगता है कि कम से कम C89 में 'fn1 (शून्य) 'का अर्थ है कि मैं एक ऐसा फ़ंक्शन घोषित कर रहा हूं जिसमें कोई पैरामीटर नहीं होता है, जबकि' fn1() 'का अर्थ है कि पैरामीटर निर्दिष्ट नहीं हैं (यानी, पुराने में कई बार जब प्रोटोटाइप का विचार आविष्कार नहीं किया गया है)। क्या मै गलत हु? – hbp