2013-03-28 11 views
24

मैं एक हेडर फाइल मान लीजिए abc.h, जहां मैं समारोह घोषणा के रूप में होता है:समारोह स्थिर घोषित लेकिन कभी परिभाषित

static int function1(); 

मैं abc.c में इस हेडर फाइल को शामिल किया है और समारोह में परिभाषित किया गया है और इसका उपयोग यह।

static int function1() 
{ 
< function definition> 
} 

संकलन के बाद मुझे चेतावनी हो रही है:

warning: function1 declared static but never defined 

मैं चेतावनी कैसे निकाल सकते हैं, स्थिर निकाले बिना। धन्यवाद।

+0

ले जाएँ अपने स्रोत फ़ाइल को हैडर से आगे घोषणा? – simonc

+16

यदि कोई फ़ंक्शन 'स्थिर' है, तो आपको इसे हेडर फ़ाइल में नहीं रखना चाहिए (जब तक कि 'इनलाइन') ... –

+0

@ H2CO3 या निजी शीर्षलेख – SomeWittyUsername

उत्तर

23

एक हेडर फ़ाइल में एक स्थैतिक फ़ंक्शन घोषित किया जा सकता है, लेकिन इससे प्रत्येक स्रोत फ़ाइल का कारण बन जाएगा जिसमें हेडर फ़ाइल को फ़ंक्शन की अपनी निजी प्रतिलिपि बनाने के लिए शामिल किया जाएगा, जो कि संभवतः नहीं था।

क्या आप वाकई abc.h फ़ाइल किसी अन्य .c फ़ाइलों में शामिल नहीं हैं?

क्योंकि फ़ंक्शन को स्थिर के रूप में घोषित करने के लिए, फ़ंक्शन को में सभी .c फ़ाइल में परिभाषित करने की आवश्यकता होती है जिसमें इसे शामिल किया गया है।

+0

मुझे एक ही समस्या थी। स्पष्ट है कि मुझे केवल .c फ़ाइल के अंदर स्थिर घोषणाएं होनी चाहिए और हेडर फ़ाइल में नहीं। दुह: डी – AntonioCS

0

अच्छा तरीका:। स्रोत फ़ाइल वे में परिभाषित कर रहे हैं में स्थिर कार्यों घोषित (भी प्रोटोटाइप प्रदान करें), के बाद से है कि केवल फ़ाइल है वे में दिखाई दे रहे

इस तरह, समारोह ही नहीं फाइल करने के लिए दिख रहा है , ऐसे दृश्यता मुद्दे संभावित कोड संघर्ष को कम कर सकते हैं! तो, बस .c फ़ाइल में प्रोटोटाइप और स्थैतिक फ़ंक्शन परिभाषा प्रदान करें। हेडर फ़ाइल में स्थिर फ़ंक्शन शामिल न करें; एचएच फाइल बाहरी खपत के लिए है।

डुप्लिकेट: Static functions in C

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