क्या मुझे प्रत्येक शीर्षलेख को शामिल करना चाहिए, भले ही इसे पहले शामिल किया गया हो? या शायद मैं इसे टालना चाहिए जब मैं कर सकता हूँ? उदाहरण के लिए । अगर मैं कुछ फाइलों में std::string
और std::vector
का उपयोग करता हूं। यदि <string>
में <vector>
शामिल हैं तो मुझे केवल <string>
या <string>
और <vector>
शामिल करना चाहिए?क्या मुझे हर शीर्षलेख शामिल करना चाहिए?
उत्तर
यदि आप किसी फ़ाइल में हेडर संबंधित इकाई (उदा। कुछ प्रकार) का उपयोग करते हैं, तो आपको इसके लिए संबंधित शीर्षलेख शामिल करना चाहिए। एक दूसरे को शामिल करने के लिए शीर्षकों पर भरोसा न करें। यदि आप इसका उपयोग करते हैं, तो इसे शामिल करें।
सी ++ मानक पुस्तकालय <string>
<vector>
में और इसके विपरीत में शामिल करने का जिक्र नहीं करता है। इस तरह की कार्यक्षमता का उपयोग करने की कोशिश करने से कोड को एक विशिष्ट कार्यान्वयन में सीमित कर दिया जाएगा। आम तौर पर, मानक लाइब्रेरी शीर्षलेख अन्य शीर्षलेख (या उनके स्वयं के आंतरिक शीर्षलेख) को अनिर्दिष्ट आदेश या तरीके से में शामिल या शामिल नहीं कर सकते हैं। एक उल्लेखनीय अपवाद <initializer_list>
है जिसे few of the other standard headers में शामिल करने की आवश्यकता है। इस अनिर्दिष्ट आदेश या तरीके में परिवर्तन भी हो सकते हैं, इस प्रकार अद्यतन संकलक या अद्यतन मानक लाइब्रेरी कार्यान्वयन के साथ पहले संकलित कोड को तोड़ना (यह होने के लिए जाना जाता है)।
यह भी मान लें कि यदि हेडर फ़ाइल कक्षा के लिए परिभाषा है, तो इसमें उस वर्ग की परिभाषा के लिए आवश्यक क्या शामिल होना चाहिए। संबंधित .cpp
में इसके संबंधित .h
और कक्षा को लागू करने के लिए आवश्यक शेष फ़ाइलों को शामिल करना चाहिए। इसकी आवश्यकता नहीं है, इसे शामिल न करें; आवश्यक से अधिक शामिल न करें (llvm style guide)। यहां एक अपवाद templates (that don't have an associated .cpp
) है; यह अपवाद अन्य शीर्षलेख केवल कार्यान्वयन पर लागू होगा।
यह ध्यान दिया जाता है कि की रखरखाव आप क्या उपयोग लंबे समय में मुश्किल हो सकता है शामिल हैं; इस प्रकार यह समझ में आता है कि इंटरफ़ेस के लिए आवश्यक क्या शामिल करने के लिए कोडिंग चक्र की शुरुआत में महत्वपूर्ण है; और फिर कोड को किए गए किसी भी उचित परिवर्तन के साथ शामिल करने के लिए फिर से जांचें।
कुछ प्रगति w.r.t. प्रतीत होता है। इस संबंध में उपकरण, जैसे कि iwyu project, जो क्लैंग टूल श्रृंखला का उपयोग करता है और ऐसा लगता है कि एमएसवीसी के लिए भी समर्थन है।
एक काउंटर उदाहरण हो सकता है अगर हैडर के लिए कारण अन्य हेडर, तो शायद शामिल करने के लिए है, लेकिन फिर भी मैं बहुत सावधान रहना होगा - यकीन है कि यह स्पष्ट रूप से परिभाषित किया गया है कि यह क्या शामिल हैं। इसका एक उदाहरण एक precompiled हेडर हो सकता है।
आप यह भी उल्लेख कर सकते हैं कि किसी की अपनी सी ++ फाइलों के लिए, इंटरफ़ेस '.h' फ़ाइल में केवल इंटरफ़ेस के लिए उपयोग किए जाने वाले शीर्षलेख शामिल होना चाहिए, लेकिन '.cpp' फ़ाइल में कार्यान्वयन में कार्यान्वयन के लिए अतिरिक्त रूप से आवश्यक सब कुछ शामिल होगा। – Edward
मैं सिद्धांत में इस भावना से सहमत हूं। दुर्भाग्यवश, यदि आप पर्ची करते हैं तो इसका पता लगाना काफी मुश्किल है। – dlf
@ डीएलएफ। यह सच है। मैं भी अनुशासन से दूर हो गया है। मुझे यकीन नहीं है कि इन चीजों की जांच करने के लिए टूलिंग में से कुछ कैसे बदल रहे हैं। कभी-कभी मुझे वापस जाने और अपना कोड ऑडिट करने की आवश्यकता होती है। – Niall
आम तौर पर, आपको कार्यान्वयन के हिस्से के रूप में हेडर निर्भरताओं का इलाज करना चाहिए, इंटरफ़ेस के हिस्से के रूप में नहीं।
आपको अन्य शीर्षकों सहित शीर्षकों पर भरोसा नहीं करना चाहिए। यदि आपकी कक्षा को std::vector
का उपयोग करने की आवश्यकता है, तो <vector>
शामिल करें; अगर आपको std::string
की आवश्यकता है, तो <string>
शामिल करें। अन्यथा आप अप्रत्याशित टूटने के लिए स्वयं को सेट करते हैं जब हेडर जो फ़ाइल को शामिल करते थे, अचानक इसमें शामिल हो जाते थे, क्योंकि उन्हें अब इसकी आवश्यकता नहीं होती है।
- 1. क्या मुझे हर जगह React.PureComponent का उपयोग करना चाहिए?
- 2. मुझे क्या करना चाहिए?
- 3. क्या मुझे लेनदेन में SELECT को शामिल करना चाहिए?
- 4. क्या मुझे <मेटा जनरेटर> टैग शामिल करना चाहिए?
- 5. क्या मुझे एक शीर्षलेख शामिल करना चाहिए जो पहले से ही अन्य शीर्षकों के माध्यम से शामिल है?
- 6. क्यूटी क्या शीर्षलेख शामिल करने के लिए?
- 7. क्या मुझे संदर्भक्यू पर सिंक्रनाइज़ करना चाहिए?
- 8. क्या मुझे PHP में mysql से पुनः कनेक्ट करना चाहिए?
- 9. मुझे 'शामिल डू ... एंड' ब्लॉक में क्या शामिल नहीं करना चाहिए?
- 10. में मुझे .gsore फ़ाइल में .vs फ़ोल्डर शामिल करना चाहिए?
- 11. सी # लॉगिंग। मुझे क्या उपयोग करना चाहिए?
- 12. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 13. बाइसन/फ्लेक्स घोषणा गड़बड़ ... मुझे कैसे शामिल/घोषित करना चाहिए?
- 14. क्या मुझे इस तरह सामग्री-स्थान शीर्षलेख का उपयोग करना चाहिए?
- 15. क्यों (हर? स्ट्रिंग? []) सच साबित करना चाहिए?
- 16. क्या मुझे ढांचे का उपयोग करना चाहिए?
- 17. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 18. क्या मुझे मार्कडाउन को स्वच्छ करना चाहिए?
- 19. क्या मुझे 'ईवेंट' लॉक करना चाहिए?
- 20. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 21. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 22. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 23. क्या मुझे रेल माइग्रेशन फ़्लैट करना चाहिए?
- 24. क्या मुझे स्कैला का अध्ययन करना चाहिए?
- 25. क्या मुझे म्यूटेक्स का निपटान करना चाहिए?
- 26. क्या मुझे std :: stringstream preallocate करना चाहिए?
- 27. मुझे देखने में क्या करना चाहिए DidUnload?
- 28. क्या मुझे इरनो सेट करना चाहिए?
- 29. क्या मुझे सर्वलेट आउटपुटस्ट्रीम बंद करना चाहिए?
- 30. क्या मुझे ProGuard का उपयोग करना चाहिए?
मैं व्यक्तिगत रूप से केवल तभी उपयोग करता हूं जब आवश्यक हो। जब तक संकलक शिकायत नहीं कर रहा है, उतना ही बेहतर –
मैं "आप जो भी उपयोग करते हैं उसे शामिल करें" के पक्ष में हूं। शायद आपको 'वेक्टर' शामिल करने की आवश्यकता नहीं हो सकती है क्योंकि दूसरे में शामिल हैं। लेकिन यह भविष्य में बदल सकता है। – tgmath
आपको उन सभी शीर्षलेख फ़ाइलों को शामिल करना चाहिए जिन्हें आपको शामिल करने की आवश्यकता है, लेकिन उससे अधिक नहीं। अगर मैं '' ' –
Barry