2013-04-12 5 views
9

कंपनी नीति निर्देश देती है कि सी स्रोत कोड में प्रत्येक फ़ंक्शन में प्रोटोटाइप होता है। मैंने अपनी खुद की मेक सिस्टम के साथ एक परियोजना विरासत में ली है (इसलिए मैं जीसीसी या विजुअल स्टूडियो पर परीक्षण नहीं कर सकता) और पाया कि फ़ाइलों में से एक प्रोटोटाइप के बिना घोषित कुछ स्थैतिक कार्यों में है। सभी .c फाइलों में प्रोटोटाइप के बिना सभी कार्यों को सूचीबद्ध करने के लिए कोई तरीका नहीं है (एक कंपाइलर के साथ जरूरी नहीं है)?प्रोटोटाइप के बिना सी फ़ंक्शंस कैसे ढूंढें?

gcc -Wmissing-prototypes 

आपको एक त्रुटि में इस चेतावनी बारी संकलन और बल लोगों को रोकने के लिए कर सकते हैं इसे ठीक करने के:

gcc -Werror=missing-prototypes 

तुम सिर्फ चाहते हैं

+2

स्थिर कार्यों वास्तव में जब तक वे कहा जाता है, प्रोटोटाइप की जरूरत नहीं है इससे पहले कि वे परिभाषित कर रहे हैं –

+0

@Paul: हाँ, लेकिन मैं यह परियोजना प्रबंधक की अनुमति देता है जल्दी से देखने के लिए क्या कार्यों उपलब्ध आदि – Gnubie

+1

तो कर रहे हैं लगता है अज्ञात कारणों से आप किसी अन्य कंपाइलर का उपयोग नहीं कर सकते हैं, आपको एक अलग स्थिर विश्लेषक उपकरण प्राप्त करना होगा। बाजार में ऐसे सभी टूल्स आपके लिए सभी गायब प्रोटोटाइप पाएंगे – Lundin

उत्तर

12

जीसीसी इस बारे में चेतावनी देने का विकल्प है इसे सूचीबद्ध करने के लिए आप gcc विकल्प -Wmissing-prototypes के साथ संकलित कर सकते हैं और के लिए grep लॉग में के लिए कोई पिछले प्रोटोटाइप नहीं कर सकते हैं।

अद्यतन संपादित के आधार पर:

जब से तुम अब उल्लेख करें कि आप जीसीसी उपयोग नहीं कर सकते, आप अपने वर्तमान संकलक के लिए एक समान विकल्प खोजने के लिए होगा। अधिकांश कंपाइलर्स में ऐसा विकल्प होता है। मैन पेज या अंतर्निहित सहायता आउटपुट के साथ शुरू करें।

+0

क्षमा करें अगर मैंने इसे स्पष्ट नहीं किया है, लेकिन इसकी अपनी बिल्ड सिस्टम है, इसलिए मैं इसे जीसीसी पर परीक्षण नहीं कर सकता। – Gnubie

+5

"बिल्ड सिस्टम"! = "कंपाइलर"। मैं मानता हूं कि इस कस्टम बिल्ड सिस्टम का उपयोग करने वाले किसी भी कंपाइलर (जीसीसी/आईसीसी/क्लैंग/.......) में चेतावनियां/त्रुटियों/आदि को सक्षम करने के लिए विभिन्न विकल्प/स्विच हैं। यह शुरू करने की जगह होगी, भले ही यह gcc नहीं है ... – twalberg

+0

ठीक है, मैं इसे देख लूंगा। सबको धन्यवाद! – Gnubie

5

ctags ऐसा कर सकते हैं!

--c-kinds=p सभी समारोह प्रोटोटाइप का सूची उत्पन्न करता है

--c-kinds=f सभी कार्यशील परिभाषाएँ

अब आप सिर्फ उन तुलना करने की आवश्यकता की सूची बनाता है।

diff -u <(ctags -R -x --sort=yes --c-kinds=f | cut -d' ' -f1) <(ctags -R -x --sort=yes --c-kinds=p | cut -d' ' -f1) | sed -n 's/^-//p'

+0

+1 एक अच्छा समाधान है! – jman

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