मैं "बाहरी" कीवर्ड की उपयोगिता पर सवाल उठाना शुरू कर रहा हूं जिसका प्रयोग अन्य मॉड्यूल (अन्य फ़ाइलों में) में चर/कार्यों तक पहुंचने के लिए किया जाता है। क्या हम वही काम नहीं कर रहे हैं जब हम चरम/फ़ंक्शन प्रोटोटाइप या फ़ंक्शन/चर परिभाषाओं के साथ हेडर फ़ाइल आयात करने के लिए # अंतर्निहित प्रीप्रोसेसर का उपयोग कर रहे हैं?बाहरी और # हेडर फ़ाइलों को शामिल करने के बीच क्या अंतर है?
14
A
उत्तर
17
extern
की आवश्यकता है क्योंकि यह घोषणा करता है कि प्रतीक मौजूद है और एक निश्चित प्रकार का है, और इसके लिए भंडारण आवंटित नहीं करता है।
यदि आप कार्य करें:
int foo;
एक हेडर फाइल में कई स्रोत फ़ाइलों के बीच साझा किया जाता है, तो आप एक लिंकर त्रुटि क्योंकि प्रत्येक स्रोत बनाया foo की अपनी एक प्रतिलिपि होता मिलेगा और लिंकर में असमर्थ रहेंगे प्रतीक को हल करने के लिए।
इसके बजाय, यदि आपके पास:
extern int foo;
हैडर में, यह एक प्रतीक है कि प्रत्येक स्रोत फ़ाइल में कहीं परिभाषित किया गया है की घोषणा करेंगे।
एक (और केवल एक) स्रोत फ़ाइल
int foo;
जो लिंकर को हल करने के लिए foo का एक उदाहरण बनाता है होते हैं।
2
नहीं # समावेशन एक प्रीप्रोसेसर कमांड है जो कहता है "इस पाठ को सभी अन्य फाइलों से यहां रखें"। इसलिए, शामिल फ़ाइल में सभी फ़ंक्शंस और चर वर्तमान फ़ाइल में परिभाषित किए गए हैं।
संबंधित मुद्दे
- 1. एसक्यूएल सर्वर: के बीच क्रॉस शामिल हों और पूर्ण बाहरी शामिल हों क्या अंतर है?
- 2. अस्थिर और बाहरी के बीच क्या अंतर है?
- 3. हेडर फ़ाइल और नेमस्पेस के बीच क्या अंतर है?
- 4. बाहरी सॉर्टिंग और आंतरिक सॉर्टिंग के बीच क्या अंतर है?
- 5. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 6. कक्षा को विस्तारित करने और PHP में इसे शामिल करने के बीच क्या अंतर है?
- 7. कहां और शामिल होने के बीच क्या अंतर है?
- 8. एरलांग: "include_lib" और "शामिल" के बीच क्या अंतर है?
- 9. 'शामिल', 'विस्तार' और 'उपयोग' के बीच क्या अंतर है?
- 10. .lib और .a फ़ाइलों के बीच क्या अंतर है?
- 11. .so और .a फ़ाइलों के बीच क्या अंतर है?
- 12. .class और .dex फ़ाइलों के बीच क्या अंतर है?
- 13. सी: हेडर फ़ाइलों में 'बाहरी' का उपयोग क्या है?
- 14. पैच और diff फ़ाइलों के बीच अंतर
- 15. .dll, .lib, .h फ़ाइलों के बीच अंतर क्या है?
- 16. हेडर फ़ाइलों को शामिल करते समय, पथ केस संवेदनशील है?
- 17. इकाई फ्रेमवर्क - शामिल/उत्सुक लोडिंग और आलसी लोडिंग का उपयोग करने के बीच क्या अंतर है?
- 18. प्रगामा और कैश-कंट्रोल हेडर के बीच अंतर?
- 19. आईओएस हेडर फ़ाइल में गुणों और चर के बीच अंतर?
- 20. "$^एन" और "$ +" के बीच क्या अंतर है?
- 21. भिन्नता और '-' के बीच क्या अंतर है?
- 22. दो एसक्यूएल में शामिल होने के बीच क्या अंतर है?
- 23. सी ++ बाहरी कीवर्ड। क्यों हेडर फ़ाइल में शामिल नहीं है?
- 24. हैश में शामिल होने और विलय में शामिल होने के बीच क्या अंतर है (ओरेकल आरडीबीएमएस)?
- 25. सामग्री-रेंज और रेंज हेडर के बीच अंतर?
- 26. बाहरी int int के बीच अंतर; बाहरी int एक = 42;
- 27. डोमेनकी-हस्ताक्षर और डीकेआईएम-हस्ताक्षर के बीच क्या अंतर है?
- 28. # {} $ {} और% {} के बीच क्या अंतर है?
- 29. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 30. $ और $$ के बीच क्या अंतर है?
लेकिन क्या आप अभी भी बाहरी int foo के साथ घोषित किए बिना int foo तक पहुंच नहीं सकते हैं, जब तक कि आप इसकी परिभाषा वाले हेडर फ़ाइल को शामिल करते हैं? –
जैसा कि जेकोपेन्हा ने उल्लेख किया है, # शामिल है बस शामिल फ़ाइल से टेक्स्ट को स्रोत फ़ाइल में सम्मिलित करता है - संकलक वास्तव में फ़ाइलों को शामिल करने के बारे में नहीं जानता है और विशेष रूप से उनका इलाज नहीं करता है। तो यदि आपके पास A.c, B.c, और C.c है, प्रत्येक "int foo" के साथ है और आप उन्हें एक साथ जोड़ते हैं, तो आप foo को कैसे हल करते हैं? यह 3 अलग-अलग स्थानों में मौजूद है। बाहरी का मतलब है, प्रतीक कहीं और मौजूद है। आप इसका उपयोग कर सकते हैं, लेकिन कोई और इसे बनाने के लिए ज़िम्मेदार है। – Michael
आप उन कार्यों के लिए पाएंगे जहां foo_fun() प्रोग्रामों का केवल एक उदाहरण है जो foo_fun() को कॉल करने वाले मॉड्यूल के साथ बाहरी या बिना काम करेगा। तो उन मामलों में आपको इसके बारे में स्पष्ट होने की कोशिश करनी चाहिए। जब आप एक साझा ग्लोबल वैरिएबल में जाते हैं तो आपको वास्तव में स्पष्ट होना चाहिए, कुछ कंपाइलर्स इसे समझते हैं, कुछ नहीं करते हैं। –