क्या सी प्रोग्रामिंग भाषा अभी भी उपयोग की जाती है?


96

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

मुझे लगा कि कोई केवल C को परीक्षण के लिए सीखेगा यदि C में विकास हो रहा है। मेरे ज्ञान से, COM और हार्डवेयर डिज़ाइन से संबंधित सभी विकास C ++ में भी किए गए हैं। इसलिए, यदि C ++ का उपयोग करने की आवश्यकता है, तो C को सीखने का कोई मतलब नहीं है। मैं ऐतिहासिक महत्व में विश्वास नहीं करता, इसलिए C सीखने में समय और धन क्यों बर्बाद करें?

क्या सी अभी भी किसी भी तरह के नए सॉफ्टवेयर डेवलपमेंट या किसी और चीज में इस्तेमाल किया जाता है?


46
क्या आपने कभी PIC के लिए C ++ कंपाइलर देखा है?
तर्क

195
क्या मैं अकेला हूँ जो दुखी है कि कोई समय और धन बर्बाद करने के साथ सीखने को समान करेगा?
जेटी

37
" मेरी जानकारी में, COM और हार्डवेयर डिज़ाइन से संबंधित सभी विकास C ++ में भी किए गए हैं " - मुझे लगता है कि आप वास्तव में कोई हार्डवेयर इंटरफ़ेस डिज़ाइन नहीं करते हैं।
ईडी एस।

32
लोग यह भूल जाते हैं कि फैंसी उच्च स्तरीय भाषाएं जिन्हें हम सभी प्यार करते हैं, अक्सर सी में लागू होती हैं
डेविड काउडन

13
@ThomasEding मृत भाषा? यदि आप C को मृत भाषा मानते हैं, तो निश्चित रूप से आपके पास प्रोग्रामिंग भाषाओं का बहुत सीमित ज्ञान है।
जेसपेर

जवाबों:


214

C का यह फायदा है कि यह एक अपेक्षाकृत छोटी भाषा है , जिससे C कंपाइलर को लागू करना आसान हो जाता है (जबकि C ++ कंपाइलर लिखने के लिए एक राक्षस है), और इससे भाषा सीखना आसान हो जाता है । इसके अलावा TIOBE इंडेक्स देखें , जिसके अनुसार C C ++ से थोड़ा आगे है।

(IMO) औचित्य के घटते क्रम में, C का अभी भी बहुत उपयोग किया जाता है

  • एंबेडेड सामान
    एक छोटे प्लेटफॉर्म पर C C संकलक को पोर्ट करने की तुलना में C ++ संकलक को पोर्ट करना आसान है। साथ ही, C अधिवक्ताओं का दावा है कि C ++ "उनकी पीठ के पीछे बहुत कुछ करता है"। हालाँकि, IMO कि FUD है।

  • सिस्टम प्रोग्रामिंग
    फिर, यह आमतौर पर दावों के कारण है कि "यह जानना आसान है कि कंपाइलर क्या कर रहा है"। हालाँकि, कई एम्बेडेड प्रोग्राम्स से लाभ होगा, जैसे, टेम्प्लेट और अन्य C ++ मुख्य विशेषताएं।

  • ओपन सोर्स सॉफ्टवेयर
    यह ज्यादातर एक दृष्टिकोण समस्या है, हालांकि: ओएसएस ने हमेशा सी ++ पर सी को प्राथमिकता दी है (जबकि यह उद्योग के बड़े हिस्सों में विपरीत है)। टोरवाल्ड्स की तर्कहीन घृणा वास्तव में लिनक्स पर इसके लिए सबसे महत्वपूर्ण कारण हो सकती है ।


16
यह दृष्टिकोण से अधिक इतिहास है। जब आप "कोर" ओपन सोर्स पैकेज पर विचार कर सकते हैं तो कई मूल रूप से विकसित किए गए थे जब C ++ उतना व्यापक रूप से उपलब्ध नहीं था जितना कि यह अब है और संसाधन भी दुर्लभ थे।
Blrfl

65
TIOBE इंडेक्स एक मजाक है। खोज इंजन हिट अर्थहीन हैं।
डेडएमजी

29
@Sedate: आमतौर पर कोड ब्लोट का कारण यह टेम्पलेट एक मिथक है, जो प्राचीन C ++ कंपाइलर के समय से चला आ रहा है। आधुनिक संकलक समान टेम्पलेट उदाहरणों को मोड़ेंगे। OTOH, टेम्पलेट टेम्पलेट मेटा-प्रोग्रामिंग की अनुमति देते हैं, जो रन-टाइम के बजाय संकलन-समय पर कोड निष्पादित करता है, जिसके परिणामस्वरूप कम कोड उत्पन्न होता है। इसके अलावा, वे बहुत सुरक्षित कार्यक्रमों (कम कास्टिंग) के लिए बनाते हैं, कुछ ऐसा जो अक्सर एम्बेडेड डोमेन में बहुत महत्वपूर्ण होता है। EC ++ को C ++ विशेषज्ञों द्वारा (अन्य बातों के अलावा) खाका फेंकने की सरासर मूर्खता से मौत के घाट उतार दिया गया है।
sbi

18
@ नाम: आपका मतलब है कि कुशल सार, सामान्य प्रोग्रामिंग और प्रकार-सुरक्षा? हाँ, जो चाहते हैं कि।
Xeo

11
@JesperE जैसा कि होता है, मैंने जब से यह लिखा है, मैंने नौकरी बदल दी है और मैं अब एम्बेडेड उपकरणों के लिए प्रोग्रामिंग कर रहा हूं। हम C ++ का उपयोग कर रहे हैं, और यह उल्लेखनीय है कि एसटीएल और टेम्प्लेट मेटा-प्रोग्रामिंग आपके लिए क्या कर सकता है जब आपके पास कमज़ोर हार्डवेयर और हार्ड रियलटाइम बाधाएं और साथ ही विश्वसनीयता आवश्यकताएं हों। (हम पावर प्लांट कर रहे हैं।) हां, आपको यह जानना होगा कि क्या आपको किसी निश्चित कोड के लिए उपयोग करना चाहिए std::vectorया std::mapनहीं - लेकिन आपको इसे स्वयं लागू करने की आवश्यकता नहीं है, लेकिन अच्छी तरह से परीक्षण किए गए, अत्यधिक प्रदर्शन करने वाले पर भरोसा कर सकते हैं। और उच्च सार प्रदान करने वाले भरोसेमंद पुस्तकालय कार्यान्वयन।
sbi

119

सी का उपयोग एम्बेडेड हार्डवेयर प्रोग्रामिंग में बहुत किया जाता है जहां संसाधन दुर्लभ हैं।

लिनक्स कर्नेल C में लिखा गया है, क्योंकि लिनुस टोरवाल्ड्स के अनुसार, C ++ एक भयानक भाषा है


14
मुझे लगता है कि विंडोज कर्नेल का बड़ा हिस्सा भी सी। और बहुत सारी विरासत प्रणालियां हैं।
कोडर

14
पूरा होने के लिए, लिनस ने कर्नेल में C ++ का प्रयास किया। यह एक से अधिक एक मुद्दा था। वैसे भी, कर्नेल डेवेलोपमेंट वास्तव में विशिष्ट विषय है, इसका मतलब यह नहीं है कि C ++ सामान्य रूप से खराब है।
deadalnix

75
दूसरों के अनुसार , लिनुस का तर्क भयानक है।
sbi

36
लीनुस के तर्कों या मान्य न हो सकता है, लेकिन लिनक्स कर्नेल अभी भी सादा सी :-) में लिखा है
Joonas Pulakka

15
लाइनस एक गिट है।
22

94

मैंने देखी गई सभी आधुनिक भाषाओं में C के साथ बातचीत कर सकते हैं:

  • सी ++
  • जावा
  • सी#
  • अजगर
  • हास्केल
  • उद्देश्य सी

C से बातचीत करने की आवश्यकता है:

  • C एक साधारण ABI है
  • C लंबे समय तक इधर-उधर रहना

इसका मतलब है कि चूंकि वे भाषाएं सी के साथ संवाद कर सकती हैं, वे कर सकते हैं:

  • इसके पुस्तकालयों का लाभ उठाएं
  • C के माध्यम से एक दूसरे के साथ संवाद करते हैं (उदाहरण के लिए, Clang C ++ में लिखा गया है, लेकिन इसके C इंटरफ़ेस पर पाइथन बाइंडिंग हुक दिया गया है)।

और मैं शर्त लगाऊंगा कि वे सभी अपने रनटाइम के लिए सी पर निर्भर हैं (जब तक कि वे पूर्ण विधानसभा नहीं गए? संदिग्ध)।

C प्रोग्रामिंग भाषाओं का लिंगुआ फ्रैंका है और सबसे सरल (ABI- वार) में से एक विशिष्ट आर्किटेक्चर (जैसे असेंबली है) से बंधा नहीं है, इससे छुटकारा पाने के लिए यह एक बड़ी पारी लेगा।


45

मेरी राय में यह "मेरे दोस्तों और मैं रेगे को सुनता है एक बहुत ही संक्षिप्त प्रश्न है। क्या कोई सचमुच रेप को सुनता है?"।

वहां की हर भाषा का उपयोग होता है। विभिन्न भाषाओं में निश्चित रूप से उनके निचे हैं। लेकिन सी के बारे में पूछ रहे हैं! मुझे यकीन है कि कम लोग सी # का उपयोग सी # दैनिक आधार पर करते हैं (एक दुकान में काम करने के पूरी तरह से पक्षपाती दृष्टिकोण से जहां कोई भी # का उपयोग नहीं करता है)।

त्वरित गूगल भाषाओं की सापेक्ष लोकप्रियता को देख रहा है।
मुझे यकीन है कि इसमें से कोई भी आधिकारिक नहीं है, लेकिन हम इसका उपयोग रुझानों को देखने के लिए कर सकते हैं:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://langpop.com/

यहां तक ​​कि टैग पर प्रश्न के SO अनुपात को देखते हुए:
https://stackoverflow.com/tags

  • C #: 209845
  • 16 अन्य टैग
  • C: 38790

तो C, SO पर 18 सबसे लोकप्रिय विषय है (और वहां बहुत सारी अन्य भाषाएं हैं)।

नोट: ऊपर दिया गया TIOBE इंडेक्स लगातार एक दशक से अधिक समय से अपडेट किया गया है (और कुछ डेटा 3 दशक पीछे जा रहा है) प्रत्येक भाषा में काम करने वाले इंजीनियरों को मापने वाला है (हालांकि मुझे नहीं पता कि यह कितना सही है)। जावा / विज़ुअल बेसिक को छोड़कर शीर्ष 10 भाषाओं में यह दर्शाता है कि मेरी दुकान के लोग क्या जानते हैं (हालाँकि हमारे अनुपात थोड़े अलग होंगे क्योंकि हमारा आकार बहुत छोटा है)।


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

3
@ जेटी: यही कारण है कि मैं स्पष्ट रूप से कहता हूं: I am sure none of this is authoritative but we can use it to see trendsलेकिन मैं आपके दूसरे बयान से असहमत हूं; सी अब उच्च शिक्षा के संस्थानों में पढ़ाया जाने वाला प्रमुख भाषा नहीं है (यदि यह तब था जब स्नातकों का नया बैच उतना बेकार नहीं होगा)। लोग आजकल जावा / सी # तेज सीख रहे हैं। इसके अलावा Tiobe रिपोर्ट नौकरियों के बारे में है न कि प्रश्न।
मार्टिन यॉर्क

पीछे मुड़कर देखने पर लगता है कि मेरी ओर से एक घटिया शब्द का चुनाव किया जाएगा। मेरा मतलब कम संख्या वाली कक्षाओं (शुरुआती कक्षाओं) से नहीं था, मेरा मतलब था कि सिस्टम क्लासेस (कंप्यूटर आर्किटेक्चर) वह जगह है जहाँ C का उपयोग किया जाता है।
जेटी

4
SO टैग काउंट सामान्य रूप से भाषा की लोकप्रियता को परिभाषित नहीं करता है, यह केवल SO के उपयोगकर्ताओं के बीच भाषा की लोकप्रियता को दर्शाता है ।
एड एस।

4
@ ईएस एस जाहिर है। लेकिन सवाल लोकप्रियता के बारे में नहीं है। एक भाषा के रूप में सी के अस्तित्व के बारे में इसकी। एसओ टैग गिनती हमें दिखाती है कि यह निश्चित रूप से एक मृत भाषा नहीं है। तथ्य यह है कि सी अन्य साइटों पर शीर्ष 2 में है, यह पहली / दूसरी सबसे अधिक इस्तेमाल की जाने वाली भाषा नहीं है। लेकिन शीर्ष 10 में इसका अस्तित्व एक महत्वपूर्ण मार्कर है कि यह मृत नहीं है। बेशक, इसका कोई भी प्रमाण सिर्फ मजबूत संकेतक नहीं है जो C अभी भी सक्रिय रूप से उपयोग किया जा रहा है।
मार्टिन यॉर्क

23

जब आप संसाधनों पर कम होते हैं और आपको ऑब्जेक्ट ओरिएंटेड क्षमताओं की आवश्यकता नहीं होती है, तो आपको C का उपयोग करने की आवश्यकता हो सकती है।

आज उपयोग में आने वाले कई सॉफ्टवेयर्स अभी भी C में लिखे गए हैं, हार्डवेयर ड्राइवरों का उल्लेख नहीं है।

Tiobe इंडेक्स के अनुसार , C अभी भी सबसे ज्यादा इस्तेमाल की जाने वाली भाषा है।


जैसा कि tcrosley ने सुझाव दिया है, आप इस संबंधित प्रश्न पर एक नज़र डालना चाहते हैं ।


तुम भी C और C ++, के बीच मतभेद की तरह पर कुछ संबंधित लेखों के लिए जाँच करनी चाहिए इस विकि या इस उदाहरण के लिए।


4
अहम !! एक महान बिंदु है। मैंने कभी यह नहीं सोचा कि "ओओपी क्षमताएं वास्तव में भाषा के लिए ओवरहेड जोड़ देती हैं"। इस वैध बिंदु को स्पष्ट करने के लिए धन्यवाद। अब, मैं समझ सकता हूं, जहां सी दूसरों से आगे है
पंकज उपाध्याय

7
@ पंकज सी ++ आमतौर पर बहुत अधिक रन टाइम ओवरहेड नहीं जोड़ता है, भाषा की बहुत अधिक जटिलता "आप जो उपयोग नहीं करते हैं उसके लिए भुगतान नहीं करने" का सिद्धांत है - यदि आप अपवादों का उपयोग नहीं करते हैं तो अपवाद नहीं हैं धीमा या अपने कोड में आकार जोड़ें। संकलक बड़ा और अधिक जटिल है
मार्टिन बेकेट

2
एम्बेडेड फ़ील्ड में C C, यह प्रश्न और उत्तर भी देखें: प्रोग्रामर.स्टैकएक्सचेंज.
com

6
आपको वास्तव में ओओपी क्षमताओं की आवश्यकता नहीं है, यह बस कुछ परिदृश्यों में अच्छी तरह से काम करता है।
एड एस।

2
@ जोसे फ़ेती: मेरा बॉस सहमत होगा क्योंकि मेरा बॉस एक अनुभवी, तर्कसंगत लड़का है। वह प्रोग्रामिंग धर्म में खरीदारी नहीं करता है।
एड एस।

20

ऐसा लगता है कि आप खुद को समझाने की कोशिश कर रहे हैं कि सी बेकार है और इसलिए इसे नजरअंदाज किया जा सकता है। चलिए आपके सवाल को तोड़ते हैं:

"मुझे लगा कि सी में विकास होने पर ही कोई व्यक्ति केवल परीक्षण के लिए C सीखेगा।"

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

"मेरी जानकारी में, COM और हार्डवेयर डिज़ाइन से संबंधित सभी विकास C ++ में भी किए जाते हैं।"

यह गलत है।

"इसलिए, C सीखने का कोई मतलब नहीं है अगर आपको C ++ का उपयोग करने की आवश्यकता है। मुझे ऐतिहासिक महत्व पर भी विश्वास नहीं है, इसलिए C सीखने में समय और पैसा क्यों बर्बाद करें?"

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


7
C , C ++ का सबसेट है , क्या आपका मतलब है ?? । C, C ++ का सबसेट नहीं है; वास्तव में वे बहुत अलग हैं। हां, C ++ C का एक संवर्द्धन है, या कभी-कभी C को कक्षाओं और OOP के साथ संदर्भित किया जाता है , लेकिन यह कहना कि C एक उपसमूह है, उचित नहीं है
पंकज उपाध्याय

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

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

16

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

इसका यह भी लाभ है कि सिस्टम प्रोग्रामिंग के लिए C और C ++ वास्तव में सबसे अच्छी भाषाएं हैं और C संकलन समय बहुत तेज है। C ++ संकलित समय किसी भी भाषा का सबसे बुरा है जो मैंने उपयोग किया है।

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


D C C की तरह सीधे C कोड को कॉल कर सकता है। आप सभी की जरूरत है अगर फ़ंक्शन प्रोटोटाइप (फिर से, सी ++ की तरह)। आप सिर्फ extern(C)D में लिखते हैं , जबकि C ++ में आप लिखते हैंextern "C"
पीटर अलेक्जेंडर

@ पेटर अलेक्जेंडर मैं डी में बाहरी (सी) से अवगत हूं। यही बात है जब मैंने रैपर फाइल के बारे में कहा था। आप सीधे C हैडर को शामिल नहीं कर सकते हैं (जो आप C ++ में कर सकते हैं, यह मानते हुए कि C हेडर बाहरी "C" का उपयोग करता है और इसमें #ifdef __cplusplus ब्लॉक है, जो सबसे अधिक काम करता है)। तब एक्सटर्नल (C) का उपयोग करने के बीच अन्य असंगतताएं होती हैं (विशेष रूप से कैसे स्ट्रिंग्स को संभाला जाता है। मेरी जानकारी के लिए, उनके पास D. में एक शून्य टर्मिनेटर नहीं है। इसलिए आपको विशेष रूप से C को पास करते समय एरे को बदलना होगा)।
jsternberg

11

langpop.com देखें , विशेष रूप से फ्रेशमेट और Google कोड से रेखांकन। यह दिखाता है कि सी अभी भी आगे है।

C अभी भी उन प्रणालियों पर लोकप्रिय है जहां आपको धातु (यानी एम्बेडेड सिस्टम) के करीब पहुंचने और भूखे अनुप्रयोगों का प्रदर्शन करने की आवश्यकता है।


4
इस URL को खोलें नहीं ! वेबसाइट अब मौजूद नहीं है और URL कुछ कष्टप्रद स्पैमी पेजों को रीडायरेक्ट करता है।
निकोले सुवंद्झिवे

11

मैं इसे लगभग हर दिन iPad / iPhone के लिए विकसित करने के लिए उपयोग करता हूं। कई पुस्तकालय सी में लिखे गए हैं और उनके पास एक उद्देश्य-सी समतुल्य नहीं है। तो हां, यह अभी भी उपयोग किया जाता है, और बाजार पर सबसे नए डिवाइस में से एक है।

सी के साथ, आप बहुत सारे एम्बेडेड सिस्टम प्रोग्राम कर सकते हैं, यह छोटा और आसान है, और शायद आने वाले कई वर्षों के लिए होगा (उर्फ आप समय बर्बाद नहीं कर रहे हैं और न ही इसे सीखने के लिए पैसा है)


2
"ऑब्जेक्टिव-सी अभी तक युवा है" यह वास्तव में 1980 के दशक के मध्य से है, जो C ++ जितना पुराना है। हालांकि इसका इस्तेमाल करने वाले ज्यादातर लोग 2007 तक इसके पार नहीं आए थे, हालांकि।

सच है, जो मैं कहना चाहता था वह मूल रूप से कई सी लाइब्रेरी हैं जो आईओएस के लिए ऑब्जेक्टिव-सी के बराबर नहीं हैं। वास्तव में, भाषा ही, बिल्कुल भी युवा नहीं है (विकी के साथ जांचा गया)। यह बात बताने के लिए धन्यवाद।
वैलेंटाइन रादु

7

आमतौर पर एम्बेडेड सिस्टम सी के लिए अभी भी व्यापक रूप से उपयोग किया जाता है।

यह सवाल कुछ और उदाहरण देता है।

Tiobe सूचकांक , जिसके द्वारा भाषा वर्गीकृत करने के लिए प्रयास करता है लोकप्रियता / उपयोग , लगातार पहली स्थानों में सी डालता है।


दूसरा स्थान (जावा के बाद)।
मार्टिन यॉर्क

7
दिलचस्प है कि सी ++ और जावा दोनों ही पिछले 10 वर्षों में लोकप्रियता में नीचे की ओर ट्रेंड कर रहे हैं, जबकि सी अधिक या कम स्थिर रहता है।
पॉल आर

7

पोर्टेबिलिटी।

हर उस सिस्टम की लिस्ट बनाइए जो आपको लगता है कि C कोड चलेगा और फिर आपकी पसंद की हर दूसरी भाषा के लिए समान सूची।

यदि आप मेरे जैसे ही उत्तर के साथ आए हैं तो निष्कर्ष हाँ है।


5

वैसे मुझे लगता है कि निम्नलिखित कारणों से C सबसे शक्तिशाली भाषा है!

1) पहले सी पर, यह एक सिस्टम भाषा है (जिसका अर्थ है कि इसका उपयोग न्यूनतम या बिना रन-टाइम के निम्न-स्तरीय प्रोग्रामिंग करने के लिए किया जा सकता है)।

2) परिणामस्वरूप आवेदन की गति। C स्रोत कोड को उच्च-स्तरीय भाषाओं की तुलना में बहुत अधिक अनुकूलित किया जा सकता है क्योंकि भाषा सेट अपेक्षाकृत छोटा और बहुत ही कुशल है। यह लगभग उतना ही है जितना कि आप असेंबली भाषा में प्रोग्रामिंग कर सकते हैं, असेंबली भाषा में प्रोग्रामिंग के बिना। और आप एक साथ असेंबली और सी का उपयोग भी कर सकते हैं!

3) C में फर्मवेयर प्रोग्रामिंग (हार्डवेयर) में इसका अनुप्रयोग है। यह विधानसभा के साथ उपयोग / काम करने की अपनी क्षमता और नियंत्रकों, प्रोसेसर और अन्य उपकरणों के साथ सीधे संवाद करने के कारण है।

4) C वर्तमान में ज्ञात कई अन्य भाषाओं के लिए एक बिल्डिंग ब्लॉक है। C के इतिहास को देखें और आप पाएंगे कि यह कुछ समय के लिए आसपास रहा है (जैसा कि प्रोग्रामिंग भाषाएं कहीं भी जाती हैं)। उदाहरण के लिए पायथन पर एक नज़र डालें पूरी तरह से ऑब्जेक्ट-ओरिएंटेड हाई-लेवल प्रोग्रामिंग भाषा। यह C (शायद C ++ भी) में लिखा गया है। आपको बताता है कि क्या आप कभी जानना चाहते हैं कि अन्य भाषाओं में हुड के नीचे क्या चल रहा है; C को समझना और यह कैसे काम करता है यह आवश्यक है।

एक एप्लिकेशन भाषा का उपयोग उच्च-स्तरीय प्रोग्रामिंग के लिए किया जाता है, जैसे शब्द प्रोसेसर या गेम लिखना। एप्लिकेशन भाषाओं के उदाहरण जावा, C # हैं। इसका कारण यह है कि वे कचरा संग्रह, स्वचालित टाइपिंग, रन-टाइम सत्यापन, आदि - जहां फोकस उत्पादकता है।

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

कुल मिलाकर, यह एक अनुप्रयोग भाषा के रूप में घट रही है, लेकिन अभी भी सिस्टम भाषा के रूप में मजबूत है।


1

अरे हाँ, यह प्रयोग किया जाता है। मैं नेटवर्क पैकेट प्रोसेसिंग के क्षेत्र में काम करता हूं। मैं दो अलग-अलग कंपनियों में रहा हूँ जहाँ हम नेटवर्क पैकेट की प्रक्रिया करते हैं। इसलिए, हम टीसीपी से ऊपर के स्तर पर नहीं, बल्कि ईथरनेट या आईपी स्तर पर काम कर रहे हैं।

दिलचस्प बात यह है कि दोनों कंपनियों में C को C ++ से अधिक चुना गया था। एक कंपनी में, दो उत्पादों में से एक को लिनक्स कर्नेल के शीर्ष पर बनाया गया था, जबकि अन्य उत्पाद को लिनक्स यूजरस्पेस में बनाया गया था। लिनक्स कर्नेल के रूप में स्पष्ट रूप से उपयोग किए जाने वाले कर्नेल उत्पाद को C में क्रमादेशित किया जाता है, लेकिन उन्होंने उपयोक्ता उत्पाद के लिए भी C का उपयोग करना चुना। दोनों उत्पादों को लगभग 2000 से शुरू किया गया था (कर्नेल उत्पाद 2000 से थोड़ा पहले और उपयोगकर्ता 2000 के बाद थोड़ा उत्पाद)।

जिस कंपनी में मैं उसके बाद गया, वह उत्पाद C ++ पर नहीं, बल्कि C पर बनाया गया था। यह वास्तव में 1990 के दशक के मध्य से एक परियोजना का एक निरंतरता है, हालांकि हालिया प्रदर्शन सुधार मांगों के कारण, यह निर्णय लिया गया था कि अनिवार्य रूप से सब कुछ फिर से लिखा जाएगा। हमारे पास फिर से लिखने के कारण C ++ का चयन करने का विकल्प था, लेकिन ऐसा नहीं किया।

नेटवर्क पैकेट प्रोसेसिंग के क्षेत्र में, प्रदर्शन बहुत मायने रखता है। इसलिए, मैं अपनी हैश टेबल को मौजूदा हैश टेबलों की तुलना में उच्च प्रदर्शन पर लागू करना चाहता हूं। मैं, हैश टेबल लेखक नहीं हूँ, जो हैश फ़ंक्शन का उपयोग करने के लिए चयन करता है। शायद मैं प्रदर्शन चाहता हूं और मुरमुरश 3 के लिए जाना चाहता हूं । शायद मैं सुरक्षा चाहता हूं और SipHash के लिए जाना चाहता हूं । मेमोरी एलोकेटर स्पष्ट रूप से कस्टम हैं। वास्तव में, हमारे द्वारा उपयोग की जाने वाली सभी महत्वपूर्ण डेटा संरचनाएं उच्चतम संभव प्रदर्शन के लिए कस्टम-कार्यान्वित की गई हैं।

हालांकि ऐसा कुछ भी नहीं है जो C ++ के उपयोग को रोक देगा, यह आमतौर पर एक बुरा विचार है। पैकेट प्रति एक एकल अपवाद अपवाद के स्तर को पैकेट प्रसंस्करण दर को गिरा देगा! इसलिए, हम C ++ के अपवादों का उपयोग नहीं कर सकते। रास्ता बहुत धीमा है। हम पहले से ही डेटा स्ट्रक्चर्स को स्ट्रक्चर के रूप में लागू करने और फिर उन स्ट्रक्चर्स पर काम करने वाले फंक्शन्स को लागू करके ऑब्जेक्ट-ओरिएंटेड सी कोड का उपयोग कर रहे हैं। C ++ में वर्चुअल फ़ंक्शंस होने की अनुमति होगी, लेकिन फिर हर जगह उपयोग किए जाने पर फिर से वर्चुअल फ़ंक्शन कॉल प्रदर्शन को मार देगा। तो, यह स्पष्ट होना बेहतर है और एक फ़ंक्शन पॉइंटर है यदि वर्चुअल फ़ंक्शन कॉल की आवश्यकता है।

C ++ आपकी पीठ पीछे कई चीजें करेगा: मेमोरी एलोकेशन, आदि। दूसरी तरफ, C में आमतौर पर ऐसा नहीं होता है। आप एक फ़ंक्शन लिख सकते हैं जो मेमोरी आवंटित करता है, लेकिन आमतौर पर फ़ंक्शन के इंटरफ़ेस से यह स्पष्ट है कि आवंटन हो रहा है।

C में प्रोग्रामिंग करते समय आप किस प्रकार के माइक्रो-ऑप्टिमाइज़ेशन कर सकते हैं, इसके उदाहरण के रूप में, Linux कर्नेल में कंटेनर_ऑफ मैक्रो पर एक नज़र डालें। ज़रूर, आप कंटेनर ++ को C ++ कोड में उपयोग कर सकते हैं, लेकिन कौन करता है? मेरा मतलब है, यह अधिकांश सी कार्यक्रमों में पूरी तरह से स्वीकार्य है, लेकिन विशिष्ट सी ++ प्रोग्रामर तुरंत कुछ और प्रस्तावित करेंगे, जैसे कि एक लिंक की गई सूची जो लिंक नोड्स को अलग-अलग ब्लॉक के रूप में आवंटित करती है। हम ऐसा नहीं चाहते क्योंकि प्रदर्शन के लिए हर आवंटित मेमोरी ब्लॉक खराब है।

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

कंपनियों में से एक में, हमारे पास वास्तव में एक कस्टम संकलित भाषा थी जहां सुविधाओं का हिस्सा लागू किया गया था। अनुमान करें कि संकलक की लक्षित भाषा क्या थी? सभा? नहीं, हमें 32-बिट और 64-बिट आर्किटेक्चर दोनों का समर्थन करना था। सी ++? निश्चित रूप से आप मज़ाक करते हैं। जाहिर है, यह जीसीसी के गणनात्मक गोटो के साथ सी था । इसलिए, कस्टम भाषा को C (या वास्तव में C का gcc संस्करण) जो संकलित गोटो का समर्थन करता है), और C संकलक ने असेंबली तैयार की।


0

मैं अभी भी सी का उपयोग दैनिक आधार पर करता हूं और प्राथमिक कारणों में से एक अन्य भाषाओं के साथ इंटरॉप के कारण है और एक एसडीके जिसे विभिन्न भाषाओं में सभी प्रकार के कंपाइलरों द्वारा निर्मित प्लगइन्स द्वारा उपयोग करने के लिए डिज़ाइन किया गया है।

मैं एक C ++ API नहीं लिख सकता हूँ जो कंस्ट्रक्टर और डिस्ट्रक्टर्स और vtables के साथ कक्षाओं का उपयोग करता है, फ़ंक्शन ओवरलोडिंग, थ्रो अपवाद, आदि जो कि Lua, C #, Python, C, आदि से उपयोग किए जा सकते हैं, अकेले एक C ++ एपीआई को विभिन्न कंपाइलरों का उपयोग करके लिखा गया है। और हमारे अपने से सेटिंग्स।

मैं एक C # SDK नहीं लिख सकता जिसे Python, जैसे, या एक Python SDK कहा जा सकता है जिसे C # कहा जा सकता है।

सी यहां एकमात्र भाषा है जो मुझे एक एपीआई बनाने की अनुमति देती है जिसे इनमें से किसी भी भाषा से कहा जा सकता है। कहा कि मैं अक्सर इन सी इंटरफेस को लागू करने के लिए C ++ का उपयोग करता हूं (हालांकि मैं कभी-कभी उन्हें सी में लागू करता हूं)।

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

जब मैं मौजूदा डेटा संरचनाओं का उपयोग करना चाहता हूं या मौजूदा लोगों का उपयोग करके उच्च-स्तरीय लोगों को लागू करना चाहता हूं, तो मैं C ++ ओवर पसंद करता हूं , लेकिन अगर मैं एक इंजन के मूल में निम्न-स्तरीय डेटा संरचना को लागू करने जा रहा हूं, जिसका कोई उपयोग नहीं है मौजूदा डेटा संरचनाएं, सी निश्चित रूप से अपने uber सरलीकृत प्रकार प्रणाली के साथ करने के लिए बहुत आसान बनाती हैं जो आपको memcpyयहां सिर्फ चीजों और memmoveचीजों को देता है, mallocएक सन्निहित ब्लॉक और reallocयह वहाँ, निर्माणकर्ताओं, विध्वंसक और अपवादों के बारे में चिंता किए बिना।

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