2008-09-09 11 views
27

आमतौर पर जब नया कोड लिखते हैं तो आप पाते हैं कि आप # शामिल नहीं हैं क्योंकि फ़ाइल संकलित नहीं होती है। काफी सरल, आप आवश्यक # शामिल जोड़ें। लेकिन बाद में आप किसी भी तरह कोड को दोबारा दोहराते हैं और अब कुछ # अंतर्निहित निर्देशों की आवश्यकता नहीं है। मैं कैसे पता लगा सकता हूं कि अब किसकी आवश्यकता नहीं है?मैं अप्रयुक्त # अंतर्निहित निर्देशों को कैसे ढूंढूं?

बेशक मैं कुछ या सभी # शामिल पंक्तियों को मैन्युअल रूप से हटा सकता हूं और फ़ाइल को फिर से संकलित होने तक उन्हें वापस जोड़ सकता हूं, लेकिन यह हजारों फ़ाइलों के साथ एक बड़ी परियोजना में वास्तव में व्यवहार्य नहीं है। क्या कोई उपकरण उपलब्ध है जो स्वचालित कार्य को करने में मदद करेगा?

+1

यह एक और सवाल है जो सीधे इससे संबंधित है: http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files-in-a-large-c-project। –

उत्तर

4

आप ऐसा करने के लिए PC-Lint/FlexeLint का उपयोग कर सकते हैं।

असामान्य रूप से उपलब्ध टूल का एक मुफ्त ओएस संस्करण नहीं है।

आप मूल्य से आगे बढ़ने और आगे घोषित करने के बजाय संदर्भ द्वारा पास करके # शामिल कर सकते हैं। ऐसा इसलिए है क्योंकि संकलक को संकलन समय पर ऑब्जेक्ट के आकार को जानने की आवश्यकता नहीं है। हालांकि आपकी तरफ से मैन्युअल काम की बड़ी मात्रा की आवश्यकता होगी। अच्छी बात यह है कि यह आपके संकलन के समय को कम करेगा।

+0

मुझे कोई लिंट दस्तावेज नहीं मिला जो उसने कहा कि यह ऐसा कर सकता है। क्या आपके पास पॉइंटर है? – staffan

+0

दुर्भाग्यवश, मैं भी इसे मुफ्त में उपलब्ध नहीं पाया। मेरे पास एक पीसी-लिंट लाइसेंस है, और मैं यह कह सकता हूं कि यह वहां है। शायद आपको सीधे जिंपेल से संपर्क करना चाहिए? वे आपको मैनुअल से अंश भेज सकते हैं। – JXG

+0

+ e766 // शीर्षलेख फ़ाइल शामिल करें फ़ाइल नाम का उपयोग मॉड्यूल स्ट्रिंग –

3

आप केवल 'ब्रूट फोर्स' कमांड लाइन टूल लिख सकते हैं जो # एक को एक-एक करके शामिल करता है और परीक्षण करता है कि संकलन अभी भी काम करता है या नहीं। जब आपको काम करने के लिए मिल गया तो मुझे बताएं। ; 0)

2

This article डॉक्सिजन के पार्सिंग का उपयोग करके # अंतर्निहित हटाने की तकनीक बताता है। यह सिर्फ एक पर्ल स्क्रिप्ट है, इसलिए इसका उपयोग करना काफी आसान है।

+2

दुर्भाग्यवश पृष्ठ में दिए गए लिंक अब काम नहीं करते हैं। –

+0

@ graham.reeds तय। –

2

वहाँ एक ग्रहण प्लगइन बुलाया includator जो प्रबंधन करने के लिए C/C++ परियोजनाओं में निर्भरता शामिल

http://includator.com/

0

यहाँ 'जानवर बल' VC6 मैक्रो जो एकल सीपीपी या पर काम करता है में मदद करता है फ़ाइल टिप्पणी करके संपादक में खोला द्वारा शामिल हैं और चल रहा है संकलन:

Sub RemoveNotUsedIncludes() 

'Check if already processed; Exit if so 
ActiveDocument.Selection.FindText "//INCLUDE NOT USED", dsMatchFromStart 
IF ActiveDocument.Selection <> "" THEN 
    ActiveDocument.Selection.SetBookmark 
    MsgBox "Already checked" 
    ActiveDocument.Selection.ClearBookmark 
    EXIT SUB 
END IF 

'Find first #include; Exit if not found 
ActiveDocument.Selection.FindText "#include", dsMatchFromStart 
IF ActiveDocument.Selection = "" THEN 
    MsgBox "No #include found" 
    EXIT SUB 
END IF 

Dim FirstIncludeLine 
FirstIncludeLine = ActiveDocument.Selection.CurrentLine 

FOR i=1 TO 200 

    'Test build 
    ActiveDocument.Selection.SetBookmark 
    ActiveDocument.Selection = "//CHECKING... #include" 
    Build 
    ActiveDocument.Undo 
    ActiveDocument.Selection.ClearBookmark 

    IF Errors = 0 THEN 
     'If build failed add comment 
     ActiveDocument.Selection.EndOfLine 
     ActiveDocument.Selection = " //INCLUDE NOT USED" 
    END IF 

    'Find next include 
    ActiveDocument.Selection.EndOfLine 
    ActiveDocument.Selection.FindText "#include" 

    'If all includes tested exit 
    IF ActiveDocument.Selection.CurrentLine = FirstIncludeLine THEN EXIT FOR 

NEXT 

एंड सब

यदि पूरे परियोजना पर काम करने के लिए इसे बेहतर किया जा सकता है।

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