2009-02-13 17 views
7

मैं वर्तमान में सी ++ सीखने की प्रक्रिया में हूं, और क्योंकि मैं अभी भी सीख रहा हूं, मैं गलतियां करता हूं।
सी ++ के रूप में अनुमत भाषा के साथ, अक्सर यह पता लगाने में काफी समय लगता है कि क्या गलत है - क्योंकि संकलक मुझे बहुत दूर जाने देता है। मुझे एहसास है कि यह लचीलापन सी ++ की प्रमुख ताकत है, लेकिन बुनियादी भाषा सीखना मुश्किल हो जाता है।
क्या कोई उपकरण है जिसका उपयोग मैं अपने कोड का विश्लेषण करने और सर्वोत्तम प्रथाओं या केवल समझदार कोडिंग के आधार पर सुझाव बनाने के लिए कर सकता हूं? एक ग्रहण प्लगइन या लिनक्स आवेदन के रूप में पसंदीदा रूप से।सी ++ कोड विश्लेषण उपकरण

उत्तर

17

अधिकतम कंपाइलर चेतावनियां सक्षम करें (यदि आप जीएनयू कंपाइलर का उपयोग कर रहे हैं तो -Wall विकल्प है)।

'लिंट' archetypical स्थिर विश्लेषण उपकरण है।

valgrind एक अच्छा रन-टाइम विश्लेषक है।

+2

+1 valgrind के लिए +1। यह कई नौसिखिया उपनिवेश त्रुटियों को एक जैसे बंद पाता है। लिंट के लिए – ypnos

+0

+1, इस तरह के एक अद्भुत उपकरण – JaredPar

+1

सावधान रहें कि लिंट का अधिकांश संस्करण सी के लिए लिखा गया है और सी ++ के लिए बहुत बेकार है। गिंपल पीसी-लिंट एक अपवाद है। –

2

लिंट - बहुत सारे संस्करण हैं लेकिन यदि आप लिंट के लिए Google हैं तो आपको एक ऐसा काम मिलना चाहिए जो काम करता है। करने के लिए दूसरी चीज आपके कंपाइलर चेतावनियों को चालू कर रही है - यदि आप जीसीसी/जी ++ का उपयोग कर रहे हैं तो विकल्प है -वॉल।

आपको CppChecker ग्रहण के लिए प्लगइन के रूप में उपयोगी हो सकता है जो जीसीसी/पीसी लिंट का समर्थन करता है।

3

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

+0

और यही कारण है कि मैं चिल्लाना चाहता था जब मैंने देखा कि मानकों की समिति सी ++ 0x में जोड़ने के लिए कौन सी नई "विशेषताएं" जोड़ रही है! –

+0

सी ++ में एक ठीक-ठीक संदर्भ-मुक्त व्याकरण है, और अगर आप चाहते हैं कि केवल एक वाक्यविन्यास पेड़ (और कुछ अस्पष्टताएं) हैं तो बिना अर्थपूर्ण विश्लेषण के विश्लेषण किया जा सकता है। आपको कमजोर पार्सिंग तकनीक जैसे एलएएलआर (उदाहरण के लिए, वाईएसीसी) का उपयोग करना बंद करना होगा। जीएलआर पार्सर्स देखें, और विशेष रूप से एल्सा www.eecs.berkeley.edu/~smcpeak/elkhound/sources/elsa/ और डीएमएस सॉफ्टवेयर रीन्गनेरिंग टूलकिट www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html इनमें से दोनों देखें उपकरण पूछे जाने पर, प्रतीकों के अर्थ को निर्धारित करने और पार्स पेड़ से अस्पष्टताओं को हटाने के अर्थ में पूर्ण "अर्थपूर्ण विश्लेषण" भी प्रदान करते हैं। –

+0

हां, लेकिन कुछ अस्पष्टता भाग वह बिंदु था जिसे मैं बनाने की कोशिश कर रहा था। – dsimcha

5

जी ++ के लिए, साथ ही साथ चालू करने के लिए, चालू भी चालू करें, और इसे मिलने वाले मुद्दों की संख्या पर पर्यवेक्षित होने के लिए तैयार रहें!

2

मुझे लगता है कि वास्तव में आपको यहां सीखने की आवश्यकता है कि आईडीई के बाहर डीबग कैसे करें। यह मेरी राय में एक मूल्यवान कौशल है, क्योंकि अब आपको सॉफ्टवेयर विकसित करने के लिए इतने भारी टूलसेट की आवश्यकता नहीं होगी, और यह उन भाषाओं की विशाल बहुमत पर लागू होगी जो आप पहले ही जानते हैं और कभी भी सीखेंगे।

हालांकि, इसका उपयोग करने में मुश्किल होती है। आपको केवल डीबगिंग उद्देश्यों के लिए कोड लिखना होगा, उदा। प्रत्येक पंक्ति के बाद भी जांच लिखें, यह सुनिश्चित करने के लिए कि परिणाम अपेक्षित है, या मान को कंसोल या संदेश बॉक्स में प्रिंट करें ताकि आप उन्हें स्वयं देख सकें। यह कठिन है लेकिन आपको आईडीई के अंदर या बाहर, अपनी गलतियों को अधिक आसानी से लेने में सक्षम बनाता है।

डाउनलोड करें और GDB जैसे कुछ मुफ्त डिबगिंग टूल को आजमाएं, वे आपकी खुद की कोड लिखने के बिना स्मृति की जांच करने में आपकी सहायता कर सकते हैं।

6

मुझे लगता है कि आपको अच्छे प्रथाओं के बारे में कुछ व्याख्यान बेहतर होंगे और वे अच्छे क्यों हैं। इससे आपको कोड विश्लेषण टूल (कम से कम शुरुआत में) से अधिक मदद मिलनी चाहिए।

मैं सुझाव है कि आप Effective C++ और ** Effective STL किताबें, कम से कम की श्रृंखला पढ़ें।alsot The Definitive C++ Book Guide and List

+0

मैं इन पुस्तकों को पढ़ने के लिए टिप्पणी दो बार (+1)। मेयर की प्रभावी सी ++ किताबों के लिए –

+1

+1। –

3

देखें (कम से कम शुरू में) सभी संकलक चेतावनी चालू किया जा रहा है और फिर समझने के लिए वे क्या मतलब है, ठीक करने के लिए समस्याओं पर प्रकाश डाला और चेतावनियों की जो वास्तविक निर्माणों कि संकलक लेखकों अस्पष्ट विचार कर सकते हैं एक अच्छा पहला कदम है प्रतिनिधित्व करते हैं।

यदि आपको कुछ और भारी कर्तव्य की आवश्यकता है, तो आप पीसी-लिंट को आजमा सकते हैं यदि आप Windows पर हैं, जो अभी भी सी ++ के लिए सबसे अच्छे लिंट टूल में से एक है। बस ध्यान रखें कि आपको अपनी कोडिंग शैली को प्रतिबिंबित करने के लिए इन उपकरणों को कॉन्फ़िगर करने की आवश्यकता होगी, अन्यथा आप चेतावनियों के साथ घूम जाएंगे और पेड़ों के लिए लकड़ी को देखने में सक्षम नहीं होंगे। हां, यह पैसा खर्च करता है और यदि आप "इसके लिए भुगतान प्राप्त करना" स्तर पर सी ++ नहीं कर रहे हैं, तो शायद यह थोड़ा अधिक है, लेकिन मुझे यह अमूल्य लगता है।

3

wikipedia पर स्थिर कोड विश्लेषण टूल की सूची के रूप में है।

लेकिन चेतावनियां आम तौर पर अच्छी होती हैं लेकिन पैडेंटिक और वॉल के साथ सभी चेतावनियों को सक्षम करने में एक समस्या यह है कि आप जिन शीर्षकों पर नियंत्रण नहीं रखते हैं, उनमें से चेतावनियों की संख्या है, इससे बहुत शोर पैदा हो सकता है। हालांकि मैं अपने सभी सॉफ़्टवेयर को सक्षम सभी चेतावनियों के साथ संकलित करना पसंद करता हूं। मैं लिनक्स में कार्यक्रम के रूप में मैं आमतौर पर इस तरह कार्य करें:

बाहरी हेडर मैं एक अलग फाइल में शामिल करने की ज़रूरत रखो, और उस फ़ाइल की शुरुआत में पहले डाल भी शामिल है:

#pragma GCC system_header 

और फिर शामिल यह कोड आपके कोड से। यह आपको बाहरी कोड से चेतावनियों में डूबने के बिना अपने कोड से सभी चेतावनियों को देखने में सक्षम बनाता है। नकारात्मकता यह है कि यह एक जीसीसी विशिष्ट समाधान है, मुझे इस के किसी भी प्लेटफ़ॉर्म स्वतंत्र समाधान से अवगत नहीं है।

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