2010-09-04 15 views
23

क्या कोई उपकरण है जो #include एस को किसी .c या .h फ़ाइल के शीर्ष पर रखने में मदद करता है?क्या ऐसे उपकरण हैं जो # शामिल करने में सहायता करते हैं?

मैं बस सोच रहा था क्योंकि मैं अपने कोड को पुनर्गठित कर रहा हूं, एक छोटी फ़ाइल से विभिन्न छोटी फाइलों में विभिन्न छोटी फ़ंक्शन परिभाषाओं/घोषणाओं को स्थानांतरित कर रहा हूं। अब प्रत्येक छोटी फ़ाइलों को #include एस के उप-समूह की आवश्यकता है जो लंबी फ़ाइल के शीर्ष पर थे।

हाथ से सभी # शामिल करने के लिए यह सिर्फ कष्टप्रद और त्रुटि प्रवण है। अक्सर कोड संकलित करता है भले ही सभी #include एस नहीं हैं। उदाहरण: फ़ाइल ए std::vector बड़े पैमाने पर उपयोग करता है लेकिन इसमें vector शामिल नहीं है; लेकिन वर्तमान में इसमें कुछ अस्पष्ट अन्य शीर्षलेख शामिल हैं जो vector (शायद कुछ रिकर्सिव के माध्यम से) शामिल होते हैं।

+0

मुझे ग्रहण सीडीटी साइट पर इस समस्या की चर्चा मिली: http://wiki.eclipse.org/CDT/C_editor_enhancements/Include_management – Frank

उत्तर

1
+0

अच्छा विचार, लेकिन शायद मुझे बिल्कुल वही नहीं चाहिए। मुझे एक उपकरण चाहिए जो मुझे बताता है कि मुझे क्या शामिल करना चाहिए, भले ही मैंने एक भी जोड़ा नहीं जोड़ा है (makedepend और दोस्तों उस मामले में एक त्रुटि देंगे)। ग्रहण जावा के लिए करता है (शायद सी ++ के लिए भी?)। इसके अलावा, makedepend मुझे प्रत्येक संकलन इकाई ('.o' फ़ाइल) के लिए निर्भरता बताता है, लेकिन यह नहीं कि एक निश्चित शीर्षलेख फ़ाइल में क्या शामिल होना चाहिए। – Frank

+3

मुझे लगता है कि जिस समस्या को आप बनाते हैं वह अनजान है। उदाहरण के लिए, मैं एक प्रोग्राम चला सकता हूं जो मुझे बताता है कि 'eOF'' foo.c' में अपरिभाषित है। मैं यांत्रिक रूप से यह भी निर्धारित कर सकता हूं कि ईओएफ को 'libio.h', 'stdio.h' और (उदा।)' Foo.h' में परिभाषित किया गया है। मैं कौन सा शामिल करूं? – msw

+4

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

2

VisualAssistX आप एक प्रकार की परिभाषा के लिए कूद कर सकते हैं। जैसे यदि आप अपने स्रोत में क्लास MyClass का उपयोग करते हैं, तो आप इसे क्लिक कर सकते हैं, गोटो परिभाषा चुन सकते हैं, और VisualAssistX उस फ़ाइल को परिभाषित करता है जिसमें इस वर्ग की परिभाषा शामिल है (संभवतः विजुअल स्टूडियो भी ऐसा कर सकता है, लेकिन इस बिंदु पर इसका उपयोग किया जा रहा है VisualAssistX, कि मैं VisualAssistX :-) में हर अद्भुत सुविधा का योगदान करता हूं)। आप अपने स्रोत कोड के लिए आवश्यक फ़ाइल शामिल करने के लिए इसका उपयोग कर सकते हैं।

पीसी-लिंट बिल्कुल विपरीत कर सकता है। यदि आपके पास अपने स्रोत में एक फ़ाइल शामिल है जिसका उपयोग नहीं किया जा रहा है, तो पीसी-लिंट आपको इसके बारे में चेतावनी दे सकता है, ताकि आप जान सकें कि फ़ाइल को स्रोत से हटाया जा सकता है (जो आपके संकलन समय पर सकारात्मक प्रभाव डालता है) ।

0

मैं फ़ाइलों को लिंक करने के तरीके को देखने के लिए डॉक्सिजन/डॉट-ग्राफ़विज़ जेनरेट ग्राफ का उपयोग करता हूं। बहुत आसान, लेकिन स्वचालित नहीं, आपको ग्राफ को दृष्टि से जांचना होगा, फिर अनावश्यक "# शामिल" लाइनों को हटाने के लिए आपको कोड संपादित करना होगा। बेशक, वास्तव में बहुत बड़ी परियोजनाओं के लिए उपयुक्त नहीं है (कहें> 100 फाइलें), जहां ग्राफ अनुपयोगी हो जाते हैं।

1

मैं हाल ही में इस समस्या से निपट रहा हूं।

(1) आह, जहां वर्ग एक घोषित किया जाता है, तो को दर्शाता है: हमारी परियोजना में हम सी ++ का उपयोग करें और प्रत्येक वर्ग एक्स

मेरे रणनीति के लिए एक Xh और एक X.cpp फ़ाइल है निम्नलिखित है एक वर्ग बी, फिर मुझे हेडर शामिल करना है Bh यदि कक्षा ए की घोषणा में केवल * प्रकार बी है, तो मुझे केवल आगे की घोषणा कक्षा बी की आवश्यकता है; एएच में। मुझे A.cpp

(2) में बीएच शामिल करने की आवश्यकता हो सकती है, उपरोक्त प्रक्रिया का उपयोग करके, मैं A.h से A.cpp तक जितना संभव हो उतना शामिल करता हूं। फिर मैं एक समय में एक को हटाने का प्रयास करता हूं और देखता हूं कि .cpp फ़ाइल अभी भी संकलित है या नहीं। यह .cpp फ़ाइल में शामिल फ़ाइलों के सेट को कम करने की अनुमति देनी चाहिए, लेकिन परिणाम कम से कम 100% सुनिश्चित नहीं है। मुझे यह भी लगता है कि कोई स्वचालित रूप से ऐसा करने के लिए एक उपकरण लिख सकता है। मैंने विजुअल स्टूडियो के लिए एक लिखना शुरू कर दिया था। मुझे यह जानकर खुशी होगी कि ऐसे उपकरण हैं।

नोट: शायद अच्छी तरह से परिभाषित आयात/निर्यात संबंधों के साथ उचित मॉड्यूल निर्माण जोड़ना सी ++ 0x के लिए वांछित जोड़ा हो सकता है। यह आयात को पुनर्गठित करने का कार्य अधिक आसान बना देगा और संकलन को बहुत तेज करेगा।

1

के बाद से यह सवाल पूछा गया है एक नया उपकरण बनाया गया है: include-what-you-use, यह बजना पर आधारित है, कुछ खास प्रतीक (memory में unique_ptr के अस्तित्व नकली करने के लिए मैपिंग प्रदान करता है, लेकिन वास्तव में कुछ मानक हेडर में bits/unique_ptr.h में परिभाषित किया गया है और देता है आप अपने खुद के मैपिंग प्रदान करते हैं।

यह अच्छा निदान और स्वत: नए सिरे से लिखना प्रदान करता है।

1

Now each of the smaller files needs a subset of the #includes that were at the top of the long file.

मैं इस VisualAssistX का उपयोग करते हैं। सबसे पहले फ़ाइल संकलन गलत है क्या देखने के लिए गाओ। फिर आप VisualAssistX के ऐड शामिल फ़ंक्शन का उपयोग कर सकते हैं। तो मैं बस उन कार्यों या कक्षाओं पर राइट-क्लिक करता हूं जिन्हें मुझे पता है कि इसमें शामिल होना आवश्यक है और शामिल करें शामिल करें। नए लापता होने को फ़िल्टर करने के लिए दो बार पुन: संकलित करें और यह किया जाता है। मुझे उम्मीद है कि मैंने समझ में लिखा है :)

सही नहीं है, लेकिन हाथ से इसे करने से तेज़ नहीं है।

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

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