2012-04-13 24 views
9

मैं केवल gcc स्रोत फ़ाइलों के माध्यम से ब्राउज़ कर रहा था। gcc.c में, मैंबाहरी घोषणा और फ़ंक्शन परिभाषा दोनों एक ही फ़ाइल में

extern int main (int, char **); 

int 
main (int argc, char **argv) 
{ 

की तरह कुछ पाया अब मेरी संदेह extern संकलक कि विशेष रूप से समारोह इस फ़ाइल में नहीं है, लेकिन इस परियोजना में कहीं और मिल जाएगा बताने के लिए है। लेकिन यहां, main की परिभाषा extern घोषणा के तुरंत बाद है। extern तब सेवारत घोषणा क्या उद्देश्य है?

ऐसा लगता है, जैसे इस विशिष्ट उदाहरण में, externexport की तरह बर्ताव कर जा करने के लिए है कि हम विधानसभा में उपयोग करते हैं, wherin हम मॉड्यूल

कोई भी विचार के बाहर एक विशेष प्रतीक निर्यात लगता है?

उत्तर

13

आप extern गलतफहमी कर रहे हैं - यह होता है नहीं संकलक परिभाषा एक और फ़ाइल में है बताओ, यह बस घोषणा करता है कि वह इसे परिभाषित करने के बिना मौजूद है। यह उसी फ़ाइल में परिभाषित करने के लिए बिल्कुल ठीक है।

सी में घोषणा की अवधारणा है (यह घोषित करना कि इसे परिभाषित किए बिना कुछ मौजूद है) और परिभाषा (वास्तव में इसे अस्तित्व में ला रही है)। आप जितनी बार चाहें उतनी बार घोषित कर सकते हैं लेकिन केवल इसे एक बार परिभाषित कर सकते हैं।

क्योंकि फ़ंक्शंस डिफ़ॉल्ट रूप से बाहरी लिंकेज है, extern कीवर्ड इस मामले में अप्रासंगिक है।

0

चेतावनियों की संभावना है कि एक फ़ंक्शन प्रोटोटाइप गुम हो गया था। बस इतना ही।

6

कार्य सी में पूरी तरह से बाहर हैं। extern सहित एक दृश्य अनुस्मारक है। साइड नोट, फ़ंक्शन को बाहरी नहीं करने के लिए आप static कीवर्ड का उपयोग कर सकते हैं।

+0

यूप। गैर-मानक कुछ करते समय बाहरी का प्रयोग करें। – Barry

0

main समारोह की परिभाषा:

int main(int argc, char **argv) { ... } 

एक घोषणा बाहरी लिंकेज के साथ समारोह main के नमूने के वाक्य रचना है पहले से ही है। इसका मतलब है extern के साथ main परिभाषा अनावश्यक है इससे पहले एक प्रोटोटाइप घोषणा।

2

फ़ंक्शन घोषणा में, extern बस घोषणा करता है कि फ़ंक्शन में बाहरी लिंकेज है, जो डिफ़ॉल्ट है; extern कीवर्ड इस संदर्भ में पूरी तरह से बेकार है, और प्रभाव extern कीवर्ड के बिना सामान्य घोषणा/प्रोटोटाइप के समान है।

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