C सीखने का व्यावहारिक तरीका? [बन्द है]


10

मैं सी और सामान्य रूप से खुदाई करना चाहता हूं जब मैं एक नई भाषा सीखना चाहता हूं जो मुझे एक सरल / प्राप्य परियोजना लक्ष्य के बारे में लगता है जिसमें कुछ व्यावहारिक उद्देश्य हैं (एक एपीआई का उपयोग करें, एक कार्य को स्वचालित करें, आदि ...)

मुझे सी के लिए एक के साथ आने में कठिन समय हो रहा है क्योंकि मुख्य रूप से सब कुछ मैं इस तथ्य को इंगित करता हूं कि वर्तमान में सी का प्राथमिक उपयोग एम्बेडेड सिस्टम और ऑपरेटिंग सिस्टम जैसे अधिक जटिल सॉफ़्टवेयर प्रोजेक्ट्स में है।

क्या यह मुझे इस तथ्य की ओर इशारा करता है कि मुझे इसे सीखने की आवश्यकता नहीं है या यह कि मुझे अपनी सीखने की रणनीति में थोड़ा और दृढ़ होना चाहिए?

व्यावहारिक शिक्षण संसाधनों का संदर्भ? (ट्यूटोरियल / कि कैसे एक अंतिम परिणाम पैदा करता है जिसका कुछ उद्देश्य / लाभ है)


3
यदि आप हमें बता सकते हैं कि आप C को क्यों सीखना चाहते हैं तो आपको अधिक समझदार उत्तर मिलेंगे?
zvrba

2
मैं zvrba से सहमत हूं। C निम्न-स्तर, तेज़ सामान और ड्राइवर कोड के लिए बढ़िया है। यदि आप गेम के लिए कोड लिख रहे हैं, तो यह भी बहुत अच्छा है (हालाँकि, आप शायद C ++ कोडर्स के साथ काम करेंगे, जो "गैर-मानक" कोड लिखने के लिए आपसे शिकायत करेंगे)। मुझे लगता है, हालांकि, कि विधानसभा और सी लैटिन (बोली जाने वाली भाषाओं में) के समान हैं, वे पहले नहीं थे, लेकिन सबसे बाद में उनके द्वारा अपनी भाषा बनाने के लिए विचारों और निर्माणों का उपयोग किया गया था। इस प्रकार, C MIGHT का अध्ययन आपको उच्च स्तरीय भाषाओं की बेहतर समझ देता है
जेमी टेलर

क्या आपने Zed Shaw's Learn C The Hard Way की जाँच की है । के रूप में व्यावहारिक के रूप में एक मिल सकता है, और काफी मुक्त भी।
वायट बार्नेट

अजगर द हार्ड वे व्यक्ति के पास अब C के लिए एक अल्फा संस्करण सहित अन्य भाषाओं के लिए किताबें हैं, मैं वहां शुरू करूंगा। सी उच्च स्तर के एएसएम के लिए एक बड़ा अंतर है, मैं एएसएम की तुलना में घृणा करता हूं क्योंकि यह गलत है। अपेक्षाकृत यकीन है कि यह आपको अन्य भाषाओं में अभ्यस्त करने देता है। इससे कोई फर्क नहीं पड़ता कि आप कोई भी एप्लिकेशन बनाना चाहते हैं जिसे आप C में लिख सकते हैं, एप्लिकेशन को भाषा को लक्षित करने का कोई कारण नहीं है।
old_timer

जवाबों:


27

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

यदि आप वास्तविक वास्तविक दुनिया की परियोजनाओं को सी कोड के साथ देखना चाहते हैं। यह कठिन हो रहा है - कई परियोजनाएं "उच्च स्तर" भाषा का उपयोग करती हैं, लेकिन सी अभी भी जीवित है और किकिंग कर रही है। यदि आप C सीखना चाहते हैं, तो सीखने को प्राप्त करने के लिए पहिये को सुदृढ़ करने से न डरें। घड़ी पर समाधानों को फिर से बनाना एक अच्छा विचार नहीं है, लेकिन एक अकादमिक अभ्यास के रूप में ऐसा करना पूरी तरह से ठीक है।


1
उस पर comp.lang.c से FAQ जोड़ें। c-faq.com
माइक शेरिल 'कैट रिकॉल'

3
+1 करने के लिए सीखने के लिए समाधानों को सुदृढ़ करने में कोई आपत्ति नहीं है।
बजे एक CVn

4
K & R सामान्य रूप से अच्छी प्रोग्रामिंग शैली सीखने के लिए भयानक है, और विशेष रूप से सुरक्षित / समझदार C प्रोग्रामिंग प्रथाओं को सिखाने में भयानक है। इसके अंदर सभी कोड स्निपेट सबसे अच्छे रूप में बाधित होते हैं, अधिकांश समय वे एकमुश्त खतरनाक आदतें सिखाते हैं। यह एक पुरानी किताब है, मैं इसे उदासीनता से परे कुछ भी करने की सलाह नहीं दूंगा। यह शुरुआती प्रोग्रामर के लिए विशेष रूप से अनुपयुक्त है।

2
@ थोमस जी हां दूसरा संस्करण। आप इससे बहुत अधिक कोड स्निपेट का हवाला दे सकते हैं और मैं इसमें 2-3 खतरनाक / खराब प्रैक्टिस के मामलों को इंगित कर सकता हूं। मैं अभी पुस्तक खोलूंगा और कुछ यादृच्छिक उदाहरण चुनूंगा। ठीक है, हम यहाँ जाते हैं, p119: स्थितियों के अंदर असाइनमेंट, देशी आदिम डेटा प्रकारों का उपयोग, अंतर्निहित int (अहस्ताक्षरित) का उपयोग, टाइप करने के लिए मॉलॉक (बहुत बुरा!), टाइप करने के लिए मुक्त करने के लिए पैरामीटर टाइपकास्ट * (क्यों ??? ), कई रिटर्न (उर्फ स्पेगेटी), NULL का उपयोग बिना उचित #include के बिना, यदि {} के बिना।

2
+ 1for KnR C. यह एक विशिष्ट भाषा में प्रोग्रामिंग के लिए सबसे अच्छा (और सबसे संक्षिप्त) परिचय है जो मैंने कभी पढ़ा है। जैसा कि अन्य ने बताया है, यह स्थानों में थोड़ा संदिग्ध हो सकता है - सलाह का एक टुकड़ा मैं यह दूंगा: यदि कभी कोई प्रोग्रामिंग मैनुअल था जो आपको आसपास के ब्लर्ब को पढ़ने की आवश्यकता थी, तो यह है। दूसरे की आप, आमतौर पर, कोड ब्लॉक से पता कर सकते हैं, लेकिन इस पुस्तक के लिए आवश्यक है कि आप इसे कवर-टू-कवर, कम से कम, एक बार पढ़ें।
जेमी टेलर

1

आप स्मृति आवंटन को वास्तव में समझने जा रहे हैं। आप ध्वनि करते हैं जैसे आपने पहले अन्य भाषाओं का उपयोग किया है, लेकिन संभावना यह है कि वे अन्य भाषाएं आपसे स्मृति प्रबंधन के विवरण को छिपाती हैं। सी में, स्मृति प्रबंधन हमेशा स्पष्ट होता है। इसके कुछ फायदे हैं, लेकिन इसका मतलब है कि आपको इसे ठीक करने के लिए सावधान रहना होगा या सभी नर्क ढीले हो जाएंगे।

आपके द्वारा उपयोग किए जाने वाले प्लेटफ़ॉर्म के लिए जो भी मेमोरी डिबगिंग सुविधाएं उपलब्ध हैं, उनका उपयोग करें। लिनक्स के लिए इलेक्ट्रिक बाड़ है, मैक ओएस एक्स पर गार्ड मॉलोक है। इसके अलावा Valgrind है जो कई ऑपरेटिंग सिस्टम का समर्थन करता है।

यदि आप उस मेमोरी को मुक्त करने में विफल होते हैं जिसे मुक्त किया जाना चाहिए, तो आपके पास मेमोरी लीक होगी। ऐसा करते रहो और तुम स्मृति से बाहर निकल जाओगे। यहां तक ​​कि बैकिंग स्टोर (जिसे ज्यादातर लोग वर्चुअल मेमोरी कहते हैं) के साथ, आप सिस्टम को अत्यधिक पृष्ठ करने या स्वैप स्थान से बाहर चलाने का कारण बन सकते हैं।

यदि आप पहले से मुक्त की गई मेमोरी को मुक्त कर देते हैं, तो आप ढेर और क्रैश को भ्रष्ट कर देंगे, लेकिन शायद तुरंत नहीं। यदि आप एक बफर से आगे निकल गए हैं तो आप ढेर को भी भ्रष्ट कर देंगे। स्मृति डीबगिंग उपकरण इन सभी के साथ मदद करेंगे।

यूनिट परीक्षण में भी मदद मिलती है।


0

मैं यहां ज्यादातर लोगों से सहमत हूं कि आज भाषाएं हाथ में कार्य द्वारा निर्धारित की जाती हैं। एक समय था जब आपके पास इस संबंध में सीमित विकल्प थे। आज C मुख्य रूप से एंबेडेड / सिस्टम प्रोग्रामिंग डोमेन में उपयोग किया जाता है जहां कोड अनुकूलन की आवश्यकता होती है। आपको अधिकतम प्राप्त करने के लिए सटीक कोड लिखने की आवश्यकता है क्योंकि यदि आप कभी उस अमूर्त का उपयोग करना शुरू करते हैं, तो अंतर्निहित सामान को बहुत मजबूत करना होगा। मैं कहूंगा कि आप कुछ ओपन सोर्स GNU प्रोजेक्ट जैसे Linux या कुछ ऐसी चीज़ों को प्राप्त करने की कोशिश करेंगे, जिन्हें C डेवलपर्स की ज़रूरत है। सी में खरोंच से बाहर कुछ लिखने के बजाय उन परियोजनाओं में अपना हाथ आज़माएं। यह शायद कोड लिखने और भाषा सीखने का बेहतर तरीका है।


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

हां, लेकिन मैं यह मान रहा हूं कि प्रश्नकर्ता वास्तव में K & R पुस्तक या कुछ इस तरह से गुजरा है। जब मैंने पायथन चैनल में पूछा तो मुझे इस दृष्टिकोण की सिफारिश की गई थी। यह सी में differnt होगा?
निशांत

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

0

आप कुछ ऐसा करना चाहते हैं जो कमांड लाइन से काम कर सके। सीयू में GUI प्रोग्रामिंग एक अच्छा GUI फ्रेमवर्क के साथ गधे में भी एक प्रमुख दर्द है ।

व्यावहारिक सी सीखने के अनुभव के लिए मेरा सामान्य सुझाव एक संपर्क सूची या अन्य सरल डेटा प्रबंधन ऐप रहा है। यह सबसे महत्वपूर्ण बिट्स (I / O, मेमोरी मैनेजमेंट, टेक्स्ट प्रोसेसिंग आदि) को कवर करेगा, और इसे पूरा करने के लिए आपको मानक C लाइब्रेरी के बाहर कुछ भी उपयोग नहीं करना पड़ेगा। C के पास ग्राफ़िक्स, नेटवर्किंग, साउंड या अन्य 1 के लिए कोई अंतर्निहित समर्थन नहीं है , इसलिए C प्रोग्रामिंग में आपके पहले फ़ॉरेस्ट के लिए, उन चीज़ों पर निर्भर रहने वाले किसी भी चीज़ से बचना सबसे अच्छा है।

सी का उपयोग सामान्य प्रयोजन के प्रोग्रामिंग के लिए किया जा सकता है; आपको बस अपनी अपेक्षाओं को कुछ हद तक पूरा करना होगा (कल्पना कीजिए कि यह 1983 है और आप VAX 11/750 से जुड़े VT52 के सामने बैठे हैं, और आप सही मानसिकता में होंगे)।

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


1 - भाषा मानक के नवीनतम (2011) संशोधन में अंतर्निहित थ्रेडिंग समर्थन जोड़ा गया है


0

मैं प्रोजेक्ट यूलर की सलाह देता हूं । मैंने अपने C ++ को बेहतर बनाने के लिए इसका इस्तेमाल किया और यह बहुत बढ़िया है। यह बहुत अच्छा है क्योंकि प्रत्येक समस्या एक छोटा सा काम है जिसे पूरा करने में कम से कम एक घंटे का समय लग सकता है (कम से कम पहले वाले)।

आपको गति के लिए अनुकूलन कोड के बारे में एक प्रोफाइलर और एक पुस्तक की आवश्यकता होगी। 1 मिनट के नियम पर टिके रहें: आपको 1 मिनट के भीतर उत्तर प्राप्त करना होगा।


0

यदि आप ALREADY एक प्रोग्रामर हैं, और JUST को C सीखने की आवश्यकता है, और भाषा के एक पुराने संस्करण को सीखने में कोई आपत्ति नहीं है (कोर अभी भी बहुत समान है), तो Leendert Ammeraal के "C फॉर प्रोग्रामर्स" को हरा नहीं सकते। । इसके माध्यम से काम करना, शुरुआत से अंत तक।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.