2013-02-07 70 views
24

फ़ाइल में स्थिर फ़ंक्शंस रखने की उपयोगिता क्या है?सी ++ स्थैतिक स्थानीय फ़ंक्शन बनाम वैश्विक फ़ंक्शन

फ़ाइल में वैश्विक फ़ंक्शंस होने से वे अलग कैसे हैं?

static int Square(int i) 
{ 
    return i * i; 
} 

बनाम

int Square(int i) 
{ 
    return i * i; 
} 

उत्तर

30

फ़ाइल में स्थिर कार्य करने की उपयोगिता क्या है?

आप इन कार्यों का उपयोग उसी फ़ाइल में अन्य कार्यों के लिए साझा कार्यान्वयन तर्क प्रदान करने के लिए कर सकते हैं। फ़ाइल के लिए विशिष्ट विभिन्न सहायक कार्य अच्छे उम्मीदवारों को फाइल-स्टेटिक घोषित किया जाता है।

फ़ाइल में वैश्विक फ़ंक्शन होने से वे अलग कैसे हैं?

वे लिंकर के लिए अदृश्य हैं, जिससे अन्य संकलन इकाइयां एक ही हस्ताक्षर के साथ कार्यों को परिभाषित करने की इजाजत देती हैं। नामस्थानों का उपयोग करने से इस समस्या को बड़ी मात्रा में कम किया जाता है, लेकिन फ़ाइल- static फ़ंक्शंस नामस्थानों की भविष्यवाणी करती हैं, क्योंकि वे सी प्रोग्रामिंग भाषा से विरासत में प्राप्त एक सुविधा हैं।

+0

यह सब मेरे लिए स्पष्ट हो गया जब मैंने पढ़ा कि वैश्विक कार्य डिफ़ॉल्ट रूप से बाहरी हैं, तो "शून्य मजाक() {}" "बाहरी शून्य मजा() {}" के समान है ... अभी भी, यदि आप नहीं करते हैं उन्हें एक शीर्षलेख में रखें, इन्हें केवल कार्यान्वयन फ़ाइल के भीतर उपयोग किया जा सकता है जिसमें उन्हें परिभाषित किया गया है (जिस बिंदु पर उन्हें परिभाषित किया गया है)। –

+2

@ सिमन Knapp वे प्रोटोटाइप का उपयोग कर विभिन्न संक्रमण इकाइयों में इस्तेमाल किया जा सकता है। –

10

एक static समारोह का अर्थ है कि लिंकर समारोह निर्यात नहीं कर सकते हैं (यानी यह अन्य translation units के लिए दृश्यमान बनाना)। यह वर्तमान अनुवाद इकाई के लिए "निजी" समारोह बनाता है। यह एक अज्ञात नेमस्पेस में फ़ंक्शन को लपेटने जैसा ही है।

namespace { 

    int Square(int i) 
    { 
     return i * i; 
    } 

} 

आम तौर पर, एक गुमनाम नाम स्थान का उपयोग कर वरीय सी ++ इसे प्राप्त करने के बजाय static कीवर्ड का उपयोग करने का तरीका है।

+2

इसे क्यों पसंद किया जाता है? यह मेरे लिए अधिक verbose लगता है। – rozina

3

स्टेटिक फ़ंक्शंस फ़ाइल पर दिखाई दे रहे हैं जहां उन्हें केवल परिभाषित किया गया था। आप उन्हें उस विशेष फ़ाइल के बाहर संदर्भित नहीं कर सकते हैं।

Read more here

2

एक शब्द में, लिंकेज। static कार्यों में आंतरिक संबंध है, यानी, वे अपनी अनुवाद इकाई के बाहर दिखाई नहीं दे रहे हैं।