2011-10-18 15 views
5

एक परियोजना स्रोत कोड में मैं घोषणास्थिर कार्य का लाभ क्या है?

static int *foo(); 

belows देखा है तो यह foo की घोषणा के रूप में स्थिर int करने के लिए सूचक लौटने समारोह को देखते हैं। तो यहां मैं आपको पूछता हूं कि कार्य को स्थैतिक घोषित करने का उद्देश्य क्या है?

+0

लॉल @ जेम्स: 'स्थिर डबल *** bzzzt();' – pmg

उत्तर

9

फ़ंक्शन का नाम अनुवाद इकाई (स्रोत फ़ाइल) के बाहर दिखाई नहीं देता है जिसमें इसे घोषित किया जाता है, और किसी अन्य स्रोत फ़ाइल में foo के साथ किसी अन्य फ़ंक्शन के साथ संघर्ष नहीं करेगा।

सामान्य रूप से, फ़ंक्शंस को static घोषित किया जाना चाहिए जब तक कि आपको इसे किसी अन्य स्रोत फ़ाइल से कॉल करने की विशिष्ट आवश्यकता न हो।

(ध्यान दें कि यह केवल नाम तक दिखाई नहीं देती है। यह अभी भी एक सूचक के माध्यम से कार्यक्रम में कहीं से भी कहा जा सकता है।)

+0

मैं पॉइंटर के साथ कैसे कॉल कर सकता हूं? –

+0

@ Mr.32 "फ़ंक्शन पॉइंटर" के लिए खोजें। – cnicutar

+1

फ़ंक्शन को स्थिर के रूप में चिह्नित करने और हेडर में इसे शामिल करने के बीच क्या अंतर है? हेडर से इसे छोड़ना एक ही प्रभाव नहीं होगा? या, क्या हेडर में कुछ डालने का कोई कारण नहीं है और इसे स्थिर के रूप में भी चिह्नित नहीं किया गया है? – Alex

2

यह फ़ंक्शन देखने से अन्य अनुवाद इकाइयों (.c फ़ाइलों) को रोकता है। चीजों को साफ और साफ रखता है। static के बिना एक फ़ंक्शन डिफ़ॉल्ट रूप से extern है (अन्य मॉड्यूल के लिए दृश्यमान है)।

+0

नहीं मिल रहा ..... –

+0

@JamesMcNellis संपादित। – cnicutar

1

static के रूप में फ़ंक्शन घोषित करने से अन्य फ़ाइलों को इसे एक्सेस करने से रोकता है। दूसरे शब्दों में, यह केवल उस फ़ाइल के लिए दृश्यमान है जिसमें इसे घोषित किया गया था; एक "स्थानीय" समारोह।

आप ऑब्जेक्ट उन्मुख भाषाओं में private के रूप में सी में static (फ़ंक्शन घोषणा कीवर्ड, चर नहीं) को भी जोड़ सकते हैं।

उदाहरण के लिए देखें।

+1

सवाल [टैग: सी] के बारे में है। एक "कक्षा" क्या है? –

+0

मैं सी के साथ अधिक चिंता कर रहा हूं ... मुझे कक्षा और सी ++ –

+1

@ केथ नहीं पता है: माफी - पिछले महीने के लिए जावा में पूरी तरह से कोडिंग कर रहा था। –

1

एक समारोह या एक वैश्विक चर छाप लगाई जा रही static इसे करने के लिए अदृश्य बनाता है एक बार वर्तमान अनुवाद इकाई को ऑब्जेक्ट फ़ाइल में संकलित करने के बाद लिंकर।

दूसरे शब्दों में, यह केवल वर्तमान अनुवाद इकाई के भीतर आंतरिक संबंध है। static का उपयोग नहीं करते या स्पष्ट रूप से extern स्टोरेज क्लास विनिर्देशक का उपयोग करते समय, प्रतीक का बाहरी संबंध होता है।

2

C99 मानक से:

पहचान फाई ईआरएस

की

6.2.2 सम्पर्क एक वस्तु या एक समारोह के लिए एक इंटरनेट le गुंजाइश पहचान फाई एर की घोषणा भंडारण स्तर के विशिष्ट एर स्थिर होते हैं, तो पहचान में आंतरिक संबंध है।

और

अनुवाद इकाइयों और पुस्तकालयों के सेट है कि एक पूरे कार्यक्रम का गठन किया, बाहरी लिंकेज के साथ एक विशेष पहचान फाई एर से प्रत्येक घोषणा एक ही वस्तु या समारोह को दर्शाता है। एक अनुवाद इकाई के भीतर, आंतरिक लिंकेज के साथ पहचान की प्रत्येक घोषणा एक ही ऑब्जेक्ट या फ़ंक्शन को दर्शाती है। लिंकेज के साथ पहचान की प्रत्येक घोषणा एक अद्वितीय इकाई को दर्शाती है।

संबंधित मुद्दे