मैं C सीखने पर विचार कर रहा हूँ
C को न सीखने का कोई विशेष कारण नहीं है लेकिन मैं C ++ का सुझाव दूंगा। यह बहुत कुछ प्रदान करता है कि C क्या करता है (चूंकि C ++ C का एक सुपर सेट है), जिसमें "एक्स्ट्रा" की एक बड़ी मात्रा है। C ++ से पहले C सीखना अनावश्यक है - वे प्रभावी रूप से अलग भाषाएं हैं।
एक और रास्ता रखो, अगर सी लकड़ी के उपकरणों का एक सेट था, तो यह संभवतः होगा:
- हथौड़ा
- नाखून
- हाथ आरी
- हाथ वाली ड्रिल
- ब्लॉक सैंडर
- छेनी (शायद)
आप इन उपकरणों के साथ कुछ भी निर्माण कर सकते हैं - लेकिन कुछ भी अच्छा संभावित समय और कौशल का एक बहुत आवश्यकता है।
C ++ आपके स्थानीय हार्डवेयर स्टोर पर बिजली उपकरणों का संग्रह है।
यदि आप शुरू करने के लिए बुनियादी भाषा सुविधाओं के साथ चिपके रहते हैं, तो C ++ में अपेक्षाकृत कम अतिरिक्त सीखने की अवस्था है।
लेकिन लोग C (या C ++) का उपयोग क्यों करते हैं अगर इसे 'खतरनाक तरीके से' इस्तेमाल किया जा सकता है?
क्योंकि कुछ लोग IKEA से फर्नीचर नहीं चाहते हैं। =)
गंभीरता से, हालांकि, कई भाषाएं जो C या C ++ से "उच्च" हैं, उनमें कुछ चीजें हो सकती हैं जो उन्हें (संभावित) कुछ पहलुओं में उपयोग करने के लिए "आसान" बनाती हैं, यह हमेशा एक अच्छी बात नहीं है। यदि आपको कुछ पसंद नहीं है या कोई सुविधा प्रदान नहीं की गई है, तो संभावना नहीं है कि आप इसके बारे में बहुत कुछ कर सकते हैं। दूसरी ओर, C और C ++ पर्याप्त "निम्न-स्तरीय" भाषा सुविधाएँ (पॉइंटर्स सहित) प्रदान करते हैं जो आप बहुत सी चीज़ों को सीधे (esp। हार्डवेयर या OS-वार) तक पहुँचा सकते हैं या इसे स्वयं बना सकते हैं, जो अन्य में संभव नहीं हो सकता है। भाषाओं को लागू किया गया।
विशेष रूप से, C में कई प्रोग्रामर्स के लिए यह वांछनीय है कि यह निम्नलिखित सुविधाओं का सेट है:
- गति - वर्षों के सापेक्ष सादगी और संकलक अनुकूलन के कारण, यह मूल रूप से बहुत तेज है। साथ ही, बहुत से लोगों ने भाषा का उपयोग करते समय विशिष्ट लक्ष्यों के लिए बहुत सारे शॉर्टकट निकाले हैं, जो इसे संभावित रूप से और भी तेज बनाता है।
- आकार - गति के लिए सूचीबद्ध के समान कारणों के लिए, सी कार्यक्रमों को बहुत छोटा किया जा सकता है (निष्पादन योग्य आकार और स्मृति उपयोग दोनों के संदर्भ में), जो सीमित मेमोरी (यानी एम्बेडेड या मोबाइल) के साथ वातावरण के लिए वांछनीय है।
संगतता - सी लंबे समय से आसपास है और सभी के पास इसके लिए उपकरण और पुस्तकालय हैं। भाषा स्वयं भी उपयुक्त नहीं है - यह एक प्रोसेसर से अपेक्षा करता है कि वह सामान रखने के लिए निर्देशों और मेमोरी को निष्पादित करे और इसके बारे में।
इसके अलावा, वहाँ एक अनुप्रयोग बाइनरी इंटरफ़ेस (ABI) के रूप में जाना जाता है । संक्षेप में, यह प्रोग्राम के लिए एक मशीन-कोड स्तर पर संवाद करने का एक तरीका है, जिसमें एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) पर फायदे हो सकते हैं । जबकि अन्य भाषाओं जैसे C ++ में एक ABI हो सकता है, आमतौर पर ये C की तुलना में कम समान (सहमत) होते हैं, इसलिए C एक अच्छी नींव भाषा बनाता है जब आप किसी कारण से किसी अन्य प्रोग्राम के साथ संवाद करने के लिए ABI का उपयोग करना चाहते हैं।
प्रोग्रामर सिर्फ जावा या पायथन या विज़ुअल बेसिक जैसी दूसरी संकलित भाषा का उपयोग क्यों नहीं करते हैं?
दक्षता (और कभी-कभी स्मृति प्रबंधन योजनाएं जो स्मृति के लिए अपेक्षाकृत सीधी पहुंच के बिना लागू नहीं की जा सकती हैं)।
सीधे पॉइंटर्स के साथ मेमोरी एक्सेस करना बहुत सी नीट (आमतौर पर जल्दी) ट्रिक्स का परिचय देता है, जब आप अपने ग्रुबी पंजे को छोटों पर और अपनी मेमोरी क्यूबहोल में शून्य पर रख सकते हैं और इस बात का इंतजार नहीं करना होगा कि ऑल टीचर को सिर्फ खिलौने सौंपना है। playtime में फिर उन्हें फिर से स्कूप।
संक्षेप में, सामान जोड़ना संभावित रूप से शिथिलता पैदा करता है या अन्यथा अवांछित जटिलता का परिचय देता है।
स्क्रिप्टेड भाषाओं और उस ilk के बारे में, आपको मूल रूप से C (या किसी संकलित भाषा) के रूप में कुशलतापूर्वक चलाने के लिए माध्यमिक कार्यक्रमों की आवश्यकता वाली भाषाओं को प्राप्त करने के लिए कड़ी मेहनत करनी होगी। अंतर्निहित ऑन-द-फ्लाई दुभाषिया को जोड़ना स्वाभाविक रूप से घटित निष्पादन की गति और बढ़ी हुई मेमोरी के उपयोग की संभावना का परिचय देता है क्योंकि आप मिश्रण में एक और कार्यक्रम जोड़ रहे हैं। आपके कार्यक्रम की दक्षता इस माध्यमिक कार्यक्रम की दक्षता पर निर्भर करती है कि आपने कितना अच्छा (खराब =)) अपने मूल प्रोग्राम कोड को लिखा है। अपने कार्यक्रम का उल्लेख नहीं करने के लिए अक्सर दूसरे कार्यक्रम पर भी पूरी तरह से भरोसा करना होता है। वह दूसरा कार्यक्रम किसी विशेष प्रणाली पर किसी कारण से मौजूद नहीं है? कोड नं।
वास्तव में, कुछ भी "अतिरिक्त" संभावित रूप से शुरू करने या आपके कोड को जटिल बनाता है। "डरावने बिंदुओं के बिना" भाषाओं में, आप हमेशा अपने पीछे सफाई करने के लिए कोड के अन्य बिट्स की प्रतीक्षा कर रहे हैं या अन्यथा चीजों को करने के लिए "सुरक्षित" तरीकों का पता लगा सकते हैं - क्योंकि आपका कार्यक्रम अभी भी वही मेमोरी एक्सेस ऑपरेशन कर रहा है जैसा कि उसके साथ किया जा सकता है संकेत दिए गए। आप सिर्फ इसे संभालने वाले नहीं हैं (इसलिए आप इसे c = genius = P) नहीं कर सकते।
खतरनाक रूप से, मेरा मतलब पॉइंटर्स और इसी तरह के अन्य सामानों से है। [...] स्टैक ओवरफ्लो प्रश्न की तरह, क्यों फ़ंक्शन इतना खतरनाक है कि इसका उपयोग नहीं किया जाना चाहिए?
स्वीकृत उत्तर के अनुसार:
"यह 1999 आईएसओ सी मानक तक भाषा का एक आधिकारिक हिस्सा बना रहा, लेकिन इसे आधिकारिक तौर पर 2011 मानक द्वारा हटा दिया गया था। अधिकांश सी कार्यान्वयन अभी भी इसका समर्थन करते हैं, लेकिन कम से कम जीसीसी किसी भी कोड के लिए चेतावनी जारी करता है जो इसका उपयोग करता है।"
यह धारणा कि क्योंकि किसी भाषा में कुछ किया जा सकता है, उसे किया जाना चाहिए। भाषा में दोष हैं जो निश्चित हो जाते हैं। पुराने कोड के साथ संगतता कारणों के लिए, यह निर्माण अभी भी उपयोग किया जा सकता है। लेकिन वहाँ कुछ भी नहीं है (संभावना) एक प्रोग्रामर का उपयोग करने के लिए मजबूर करता है () और, वास्तव में, इस आदेश को अनिवार्य रूप से सुरक्षित विकल्प के साथ बदल दिया गया था।
इस बिंदु पर अधिक, हो जाता है () प्रति के साथ एक सूचक मुद्दा नहीं है। यह एक कमांड के साथ एक समस्या है जो जरूरी नहीं कि स्मृति को सुरक्षित रूप से कैसे उपयोग करें। अमूर्त अर्थों में, यह सभी सूचक मुद्दे हैं - पढ़ना और लिखना आपके लिए नहीं होना चाहिए। यह संकेत के साथ एक समस्या नहीं है; यह सूचक कार्यान्वयन के साथ एक समस्या है।
स्पष्ट करने के लिए, पॉइंटर्स खतरनाक नहीं हैं जब तक कि आप गलती से एक मेमोरी स्थान तक नहीं पहुंचते हैं जिसे आप करने का इरादा नहीं कर रहे थे। और फिर भी यह गारंटी नहीं देता कि आपका कंप्यूटर पिघल जाएगा या फट जाएगा। ज्यादातर मामलों में, आपका प्रोग्राम कार्य करने के लिए (सही ढंग से) बंद हो जाएगा।
उन्होंने कहा, क्योंकि पॉइंटर्स मेमोरी स्थानों तक पहुंच प्रदान करते हैं और क्योंकि डेटा और निष्पादन योग्य कोड एक साथ मेमोरी में मौजूद होते हैं, इसलिए आकस्मिक भ्रष्टाचार का एक वास्तविक खतरा पर्याप्त होता है जिसे आप मेमोरी को सही तरीके से प्रबंधित करना चाहते हैं।
उस बिंदु पर, क्योंकि सही मायने में प्रत्यक्ष मेमोरी एक्सेस ऑपरेशन अक्सर सामान्य रूप से कम लाभ प्रदान करते हैं, जैसे कि वे वर्षों पहले हो सकते हैं, यहां तक कि गैर ++ कचरा संग्रहित भाषाओं जैसे C ++ ने स्मार्ट पॉइंटर्स जैसी चीजों को स्मृति दक्षता और सुरक्षा के बीच की खाई को पाटने में मदद करने के लिए पेश किया है ।
सारांश में, सूचक को डरने का बहुत कम कारण है जब तक कि वह सुरक्षित रूप से उपयोग नहीं किया जाता है। स्टीव "द क्रोकोडाइल हंटर" इरविन के साउथ पार्क के संस्करण से एक संकेत लें - मगरमच्छ के बुमहोल्स में अपना अंगूठा चिपकाकर न घूमें ।