सी (प्रोग्रामिंग भाषा): Difference between revisions
No edit summary |
No edit summary |
||
(11 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox programming language | {{Infobox programming language | ||
| name = C | | name = C | ||
Line 24: | Line 23: | ||
| wikibooks = C Programming | | wikibooks = C Programming | ||
}} | }} | ||
[[सी|'''C''']] अक्षर '''C''' | [[सी|'''C''']] अक्षर से उच्चारित' होने वाले शब्द '''C''' को <ref>{{cite web |title=नाम पर आधारित है, और अंग्रेजी वर्णमाला में अक्षर C की तरह उच्चारित किया जाता है|url=https://eng.ichacha.net/pronounce/the%20c%20programming%20language.html |publisher=English Chinese Dictionary |access-date=17 November 2022}}</ref> सामान्य-उद्देश्य वाली कंप्यूटर [[प्रोग्रामिंग भाषा]] है। यह 1970 के दशक में [[डेनिस रिची]] द्वारा बनाया गया था। यह बहुत व्यापक रूप से उपयोगी और प्रभावशाली बना हुआ है। रचना के अनुसार, C की विशेषताएं लक्षित सीपीयू की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे [[ऑपरेटिंग सिस्टम|संचालन प्रणाली]], [[डिवाइस ड्राइवर]], [[प्रोटोकॉल स्टैक]] में स्थायी उपयोग मिला है, चूंकि कम हो रहा है।<ref>{{cite web |title=सी भाषा सबसे कम लोकप्रियता रेटिंग में गिरती है|url=https://www.developer.com/news/c-language-drops-to-lowest-popularity-rating/ |website=Developer.com |access-date=2022-08-01 |date=9 August 2016}}</ref> [[अनुप्रयोग प्रक्रिया सामग्री]] के लिए C का उपयोग सामान्यतः कंप्यूटर स्थापत्य पर किया जाता है जो सबसे बड़े [[सुपर कंप्यूटर|सुपरकंप्यूटर]] से लेकर सबसे छोटे [[microcontroller|सूक्ष्म नियंत्रक]] और [[अंतः स्थापित प्रणाली]] तक होता है। | ||
प्रोग्रामिंग भाषा C के उत्तराधिकारी, C को मूल रूप से यूनिक्स पर चलने वाली उपयोगिताओं के निर्माण के लिए 1972 और 1973 के बीच रिची द्वारा [[बेल लैब्स]] में विकसित किया गया था। इसे यूनिक्स संचालन प्रणाली के कर्नेल को फिर से लागू करने के लिए लागू किया गया था।<ref name="sigplan" />1980 के दशक के पर्यन्त, C ने धीरे-धीरे लोकप्रियता प्राप्त की। यह मापने वाली प्रोग्रामिंग भाषा की लोकप्रियता बन गई है,<ref name="langpop">{{cite web |url=http://www.langpop.com/ |title=प्रोग्रामिंग भाषा की लोकप्रियता|year=2009 |access-date=January 16, 2009 |url-status=dead |archive-url= https://web.archive.org/web/20090116080326/http://www.langpop.com/ |archive-date=2009-01-16}}</ref><ref name="TIOBE-2009">{{cite web |url=http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html | title=TIOBE प्रोग्रामिंग कम्युनिटी इंडेक्स|year=2009 |access-date=May 6, 2009 |url-status=dead |archive-url= https://web.archive.org/web/20090504181627/http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html |archive-date=2009-05-04}}</ref> यह C [[संकलक]] के साथ लगभग उपलब्ध है। सभी आधुनिक [[कंप्यूटर आर्किटेक्चर|कंप्यूटर स्थापत्य]] और संचालन प्रणाली C को 1989 से [[अमेरिकी राष्ट्रीय मानक संस्थान|अमेरिकी राष्ट्रीय स्टैंडर्ड संस्थान]] ([[ANSI C]] ) और अंतर्राष्ट्रीय स्टैंडर्डीकरण संगठन (ISO) द्वारा स्टैंडर्डीकृत किया गया है। | |||
C स्थिर प्रकार की प्रणाली के साथ [[संरचित प्रोग्रामिंग]], [[लेक्सिकल वैरिएबल स्कोप|शाब्दिक चर]] विस्तारऔर रिकर्सन कंप्यूटर विज्ञान का समर्थन करने वाली [[अनिवार्य प्रोग्रामिंग]] [[प्रक्रियात्मक प्रोग्रामिंग]] भाषा है। इसे [[निम्न-स्तरीय प्रोग्रामिंग भाषा]] प्रदान करने के लिए संकलक के रूप में रचना किया गया था। [[स्मृति]] और भाषा के लिए निम्न-स्तरीय पहुंच [[मशीन कोड|मशीन]] संकेत के लिए कुशलता से मानचित्र बनाती है, सभी न्यूनतम [[रनटाइम सिस्टम|क्रम प्रणाली]] के साथ इसकी निम्न-स्तरीय क्षमताओं के अतिरिक्त, भाषा को क्रॉस-प्लेटफ़ॉर्म प्रोग्रामिंग को प्रोत्साहित करने के लिए रचना किया गया था। [[विशिष्टता (तकनीकी मानक)|विशिष्टता (तकनीकी स्टैंडर्ड)]] - अनुरूप्रोग्राम को [[सॉफ्टवेयर पोर्टेबिलिटी|सॉफ्टवेयर सुवाह्यता]] के साथ दिमाग में लिखा गया है, इसके स्रोत संकेत में कुछ बदलावों के साथ कंप्यूटर मंच और संचालन प्रणाली की विस्तृत विविधता के लिए संकलित किया जा सकता है।<ref name="cppreference" /> | |||
2000 के बाद से,C ने क्रमशः टीआईओबीई सूची में शीर्ष दो भाषाओं में स्थान दिया है, जो प्रोग्रामिंग भाषाओं की लोकप्रियता का पैमाना है।<ref name="TIOBE-2021">{{cite web|title=अक्टूबर 2021 के लिए TIOBE इंडेक्स|url=https://www.tiobe.com/tiobe-index/|access-date=2021-10-07}}</ref> | |||
== अवलोकन == | == अवलोकन == | ||
[[File:Ken n dennis.jpg|thumb|[[केन थॉम्पसन]] के | [[File:Ken n dennis.jpg|thumb|[[केन थॉम्पसन]] के साथ सी प्रोग्रामिंग भाषा के आविष्कारक डेनिस रिची (दाएं)।]]C [[ALGOL|ऐल्गॉल]] परंपरा में अनिवार्य प्रोग्रामिंग प्रक्रियात्मक भाषा है। इसमें स्थिर प्रकार की प्रणाली है। C में सभी [[निष्पादन योग्य कोड|निष्पादन योग्य]] संकेत [[सबरूटीन|उप-दैनिकि]] जिसे फ़ंक्शन भी कहा जाता है, चूंकि [[कार्यात्मक प्रोग्रामिंग]] के अर्थ में नहीं के भीतर समाहित है। [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] मूल्य द्वारा पारित किया जाता है, चूंकि सरणी डेटा प्रकार को सूचक कंप्यूटर प्रोग्रामिंग के रूप में पारित किया जाता है, अर्थात सरणी में पहले विषय का पता संदर्भ से गुजरें C में स्पष्ट रूप से अतिसूचक द्वारा संदर्भित की जा रही वस्तु के लिए असत्य है। | ||
C प्रोग्राम स्रोत विवरण [[मुक्त रूप भाषा]] मुक्त प्रारूप है, जिसमें [[बयान (प्रोग्रामिंग)|विवरण (प्रोग्रामिंग)]] विभाजक के रूप में [[सेमीकोलन]] का उपयोग किया जाता है और कथन के समूहीकरण खंड के लिए [[घुंघराले ब्रेसिज़]] होते हैं। | C प्रोग्राम स्रोत विवरण [[मुक्त रूप भाषा]] मुक्त प्रारूप है, जिसमें [[बयान (प्रोग्रामिंग)|विवरण (प्रोग्रामिंग)]] विभाजक के रूप में [[सेमीकोलन]] का उपयोग किया जाता है और कथन के समूहीकरण खंड के लिए [[घुंघराले ब्रेसिज़]] होते हैं। | ||
सी भाषा निम्नलिखित विशेषताओं को भी प्रदर्शित करती है: | |||
* भाषा में कीवर्ड की छोटी, निश्चित संख्या होती है, जिसमें नियंत्रण प्रवाह आदिमों का पूरा चयन सम्मलित होता है: <code>[[Conditional (computer programming)|if/else]]</code>, <code>[[For loop|for]]</code>, <code>[[Do while loop|do/while]]</code>, <code>[[While loop|while]]</code>, तथा <code>[[Switch statement|switch]]</code> | * भाषा में कीवर्ड की छोटी, निश्चित संख्या होती है, जिसमें नियंत्रण प्रवाह आदिमों का पूरा चयन सम्मलित होता है: <code>[[Conditional (computer programming)|if/else]]</code>, <code>[[For loop|for]]</code>, <code>[[Do while loop|do/while]]</code>, <code>[[While loop|while]]</code>, तथा <code>[[Switch statement|switch]]</code> उपयोगकर्ता-परिभाषित नाम किसी भी प्रकार के [[सिगिल (कंप्यूटर प्रोग्रामिंग)]] द्वारा खोज शब्दों से अलग नहीं हैं। | ||
* इसमें बड़ी संख्या में अंकगणित, बिटवाइज़और तर्क ऑपरेटर आदि हैं। | * इसमें बड़ी संख्या में अंकगणित, बिटवाइज़और तर्क ऑपरेटर आदि हैं। | ||
* कथन में से अधिक कार्यभार कंप्यूटर विज्ञान दिए जा सकते हैं। | * कथन में से अधिक कार्यभार कंप्यूटर विज्ञान दिए जा सकते हैं। | ||
* | * फ़ंक्शन: | ||
** आवश्यकता न होने पर फंक्शन वापसी मूल्य को अनदेखा किया जा सकता है। | ** आवश्यकता न होने पर फंक्शन वापसी मूल्य को अनदेखा किया जा सकता है। | ||
** फ़ंक्शन और डेटा सूचक तदर्थ [[रन-टाइम बहुरूपता|क्रम बहुरूपता]] की अनुमति देते हैं। | ** फ़ंक्शन और डेटा सूचक तदर्थ [[रन-टाइम बहुरूपता|क्रम बहुरूपता]] की अनुमति देते हैं। | ||
Line 52: | Line 49: | ||
** विषम समुच्चय डेटा प्रकार (<code>[[struct (C programming language)|struct]]</code>) संबंधित डेटा तत्वों को इकाई के रूप में अभिगम और निर्धारण करने की अनुमति दें। | ** विषम समुच्चय डेटा प्रकार (<code>[[struct (C programming language)|struct]]</code>) संबंधित डेटा तत्वों को इकाई के रूप में अभिगम और निर्धारण करने की अनुमति दें। | ||
** संघ प्रकार अतिव्यापी सदस्यों के साथ संरचना है संग्रहीत अंतिम सदस्य ही मान्य है। | ** संघ प्रकार अतिव्यापी सदस्यों के साथ संरचना है संग्रहीत अंतिम सदस्य ही मान्य है। | ||
** सरणी डेटा प्ररूप सूची माध्यमिक अंकन है, जिसे सूचक अंकगणित के संदर्भ में परिभाषित किया गया है। संरचनाओं के विपरीत, सरणी याँ प्रथम श्रेणी की वस्तुएँ नहीं हैं: उन्हें अंतर्निर्मित ऑपरेटरों का उपयोग करके निर्धारण या तुलना नहीं की जा सकती है। परिभाषा में कोई सरणी कीवर्ड नहीं है इसके अतिरिक्त, उदाहरण के लिए, वर्गाकार कोष्ठक, वाक्यात्मक रूप से | ** सरणी डेटा प्ररूप सूची माध्यमिक अंकन है, जिसे सूचक अंकगणित के संदर्भ में परिभाषित किया गया है। संरचनाओं के विपरीत, सरणी याँ प्रथम श्रेणी की वस्तुएँ नहीं हैं: उन्हें अंतर्निर्मित ऑपरेटरों का उपयोग करके निर्धारण या तुलना नहीं की जा सकती है। परिभाषा में कोई सरणी कीवर्ड नहीं है इसके अतिरिक्त, उदाहरण के लिए, वर्गाकार कोष्ठक, वाक्यात्मक रूप से <code>month[11]</code> सरणी यों को इंगित करते हैं। | ||
** प्रगणित प्रकार <code>Enum</code> कीवर्ड के साथ संभव हैं। वे पूर्णांकों के साथ स्वतंत्र रूप से परस्पर परिवर्तनीय हैं। | ** प्रगणित प्रकार <code>Enum</code> कीवर्ड के साथ संभव हैं। वे पूर्णांकों के साथ स्वतंत्र रूप से परस्पर परिवर्तनीय हैं। | ||
** स्ट्रिंग (कंप्यूटर विज्ञान) अलग डेटा प्रकार नहीं हैं, किन्तु परंपरागत रूप से C [[सी स्ट्रिंग हैंडलिंग|स्ट्रिंग]] संचालन को [[अशक्त-समाप्त स्ट्रिंग]] के रूप में किया जाता है। अशक्त-समाप्त चरित्र सरणी याँ। | ** स्ट्रिंग (कंप्यूटर विज्ञान) अलग डेटा प्रकार नहीं हैं, किन्तु परंपरागत रूप से C [[सी स्ट्रिंग हैंडलिंग|स्ट्रिंग]] संचालन को [[अशक्त-समाप्त स्ट्रिंग]] के रूप में किया जाता है। अशक्त-समाप्त चरित्र सरणी याँ। | ||
* मशीन के पतों को सूचक(कंप्यूटर प्रोग्रामिंग) में परिवर्तित करके कंप्यूटर मेमोरी तक निम्न-स्तरीय पहुंच संभव है। | * मशीन के पतों को सूचक(कंप्यूटर प्रोग्रामिंग) में परिवर्तित करके कंप्यूटर मेमोरी तक निम्न-स्तरीय पहुंच संभव है। | ||
* [[प्रक्रिया (कंप्यूटर विज्ञान)]] (उप-दैनिकि्स मान वापस नहीं कर रहे हैं) फ़ंक्शन का विशेष स्थिति है, अनपेक्षित वापसी प्रकार के साथ <code>void</code>. | * [[प्रक्रिया (कंप्यूटर विज्ञान)]] (उप-दैनिकि्स मान वापस नहीं कर रहे हैं) फ़ंक्शन का विशेष स्थिति है, अनपेक्षित वापसी प्रकार के साथ <code>void</code>. | ||
* [[पुस्तकालय (कम्प्यूटिंग)]] के लिए कॉल के साथ मेमोरी | * [[पुस्तकालय (कम्प्यूटिंग)|लाइब्रेरी (कम्प्यूटिंग)]] के लिए कॉल के साथ मेमोरी फंक्शन के लिए [[गतिशील आवंटन]] हो सकती है। | ||
* [[सी प्रीप्रोसेसर|C]] पूर्वप्रक्रमक [[मैक्रो (कंप्यूटर विज्ञान)]] परिभाषा, स्रोत | * [[सी प्रीप्रोसेसर|C]] पूर्वप्रक्रमक [[मैक्रो (कंप्यूटर विज्ञान)]] परिभाषा, स्रोत संकेत फ़ाइल समावेशन और [[सशर्त संकलन|प्रतिबंधात्मक संकलन]] करता है। | ||
* [[मॉड्यूलर प्रोग्रामिंग]] का मूल रूप है: फाइलों को अलग से संकलित किया जा सकता है और [[लिंकर (कंप्यूटिंग)]] साथ, नियंत्रण के साथ जो स्थिर (कीवर्ड) के माध्यम से अन्य फाइलों के लिए कार्य और डेटा प्रयोजन दिखाई दे रहे हैं।<code>statiC</code> तथा <code>extern</code> | * [[मॉड्यूलर प्रोग्रामिंग]] का मूल रूप है: फाइलों को अलग से संकलित किया जा सकता है और [[लिंकर (कंप्यूटिंग)]] साथ, नियंत्रण के साथ जो स्थिर (कीवर्ड) के माध्यम से अन्य फाइलों के लिए कार्य और डेटा प्रयोजन दिखाई दे रहे हैं। इसके<code>statiC</code> तथा <code>extern</code> गुण भी हैं। | ||
* इनपुट/आउटपुट | * इनपुट/आउटपुट या आई/ओ, स्ट्रिंग (कंप्यूटर विज्ञान) कार्यसाधन , और गणितीय कार्यों जैसी जटिल कार्यक्षमता क्रमशः लाइब्रेरी (कंप्यूटिंग) को सौंपी जाती है। | ||
* संकलन के बाद उत्पन्न | * संकलन के बाद उत्पन्न संकेत की अंतर्निहित प्लेटफॉर्म पर अपेक्षाकृत सीधी आवश्यकताएं होती हैं, जो इसे संचालन प्रणाली बनाने और अंतर्निहित प्रणाली में उपयोग के लिए उपयुक्त बनाती हैं। | ||
चूँकि C में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं सम्मलित नहीं हैं जैसे [[वस्तु उन्मुख कार्यकर्म]] और [[कचरा संग्रह (कंप्यूटर विज्ञान)]]), इन्हें अधिकांशतः बाहरी | चूँकि C में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं सम्मलित नहीं हैं जैसे [[वस्तु उन्मुख कार्यकर्म]] और [[कचरा संग्रह (कंप्यूटर विज्ञान)]]), इन्हें अधिकांशतः बाहरी लाइब्रेरीों के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। इसका उपयोग करने वालों में [[ग्लिब OS]] या [[बोहेम GC]] मुख्य थे। | ||
=== अन्य भाषाओं से संबंध === | === अन्य भाषाओं से संबंध === | ||
Line 72: | Line 69: | ||
=== प्रारंभिक घटनाक्रम === | === प्रारंभिक घटनाक्रम === | ||
{| class="wikitable floatright" style="margin-left: 1.5em;" | {| class="wikitable floatright" style="margin-left: 1.5em;" | ||
|+ | |+भाषा के विकास की समयरेखा | ||
|- | |- | ||
! | ! वर्ष | ||
! C | ! C स्टैंडर्ड<ref name="cppreference">{{cite web |url=http://en.cppreference.com/w/c/language/history |title=History of C |website=en.cppreference.com |access-date=May 28, 2018 |archive-date=May 29, 2018 |archive-url=https://web.archive.org/web/20180529130541/http://en.cppreference.com/w/c/language/history |url-status=live }}</ref> | ||
|- | |- | ||
| 1972 | | 1972 | ||
| | | जन्म | ||
|- | |- | ||
| 1978 | | 1978 | ||
| [[K&R C| | | [[K&R C|K और R C]] | ||
|- | |- | ||
| 1989/1990 | | 1989/1990 | ||
Line 98: | Line 95: | ||
| [[C2x|C 2x]] | | [[C2x|C 2x]] | ||
|} | |} | ||
C की उत्पत्ति यूनिक्स संचालन प्रणाली के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा [[PDP-7]] पर | C की उत्पत्ति यूनिक्स संचालन प्रणाली के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा [[PDP-7]] पर भाषा में लागू की गई थी, जिसमें सहयोगियों के कई विचार सम्मलित थे। आखिरकार, उन्होंने संचालन प्रणाली को [[PDP-11]] में पोर्ट करने का फैसला किया। यूनिक्स का मूल PDP-11 संस्करण भी जनसमूह भाषा में विकसित किया गया था।<ref name="sigplan" /> | ||
====B ==== | ====B ==== | ||
{{main|B (प्रोग्रामिंग भाषा)}} | {{main|B (प्रोग्रामिंग भाषा)}} | ||
थॉम्पसन नए प्लेटफॉर्म के लिए उपयोगिताओं को बनाने के लिए प्रोग्रामिंग भाषा चाहता था। सबसे पहले, उन्होंने [[फोरट्रान]] संकलक बनाने की कोशिश की, किन्तु जल्द ही इस विचार को छोड़ दिया। इसके अतिरिक्त, उन्होंने जल्दी में ही में विकसित BCPL [[सिस्टम प्रोग्रामिंग भाषा|प्रणाली प्रोग्रामिंग भाषा]] कम करना संस्करण बनाया। BCPL का आधिकारिक विवरण उस समय उपलब्ध नहीं था,<ref name="NFDsZ">{{cite web |url=https://www.lysator.liu.se/c/dmr-on-histories.html |first1=Dennis |last1=Ritchie |title=बीसीपीएल से बी से सी|access-date=September 10, 2019 |archive-date=December 12, 2019 |archive-url=https://web.archive.org/web/20191212221532/http://www.lysator.liu.se/c/dmr-on-histories.html |url-status=live }}</ref> और थॉम्पसन ने वाक्य-विन्यास को कम शब्दयुक्त होने के लिए संशोधित किया और सरलीकृत ऐल्गॉल के समान जिसे SM ऐल्गॉल के रूप में जाना जाता है।<ref name="Ars">{{Cite web |last=Jensen |first=Richard |date=9 December 2020 |title="एक लानत बेवकूफी की बात" - सी की उत्पत्ति|url=https://arstechnica.com/features/2020/12/a-damn-stupid-thing-to-do-the-origins-of-c/ |access-date=2022-03-28 |website=Ars Technica |language=en-us}}</ref> परिणाम यह था कि थॉम्पसन ने B (प्रोग्रामिंग भाषा) कहा था।<ref name="sigplan" />उन्होंने B को बहुत सारे SM ऐल्गॉल वाक्य-विन्यास के साथ BC PL शब्दार्थ के रूप में वर्णित | थॉम्पसन नए प्लेटफॉर्म के लिए उपयोगिताओं को बनाने के लिए प्रोग्रामिंग भाषा चाहता था। सबसे पहले, उन्होंने [[फोरट्रान]] संकलक बनाने की कोशिश की, किन्तु जल्द ही इस विचार को छोड़ दिया। इसके अतिरिक्त, उन्होंने जल्दी में ही में विकसित BCPL [[सिस्टम प्रोग्रामिंग भाषा|प्रणाली प्रोग्रामिंग भाषा]] कम करना संस्करण बनाया। BCPL का आधिकारिक विवरण उस समय उपलब्ध नहीं था,<ref name="NFDsZ">{{cite web |url=https://www.lysator.liu.se/c/dmr-on-histories.html |first1=Dennis |last1=Ritchie |title=बीसीपीएल से बी से सी|access-date=September 10, 2019 |archive-date=December 12, 2019 |archive-url=https://web.archive.org/web/20191212221532/http://www.lysator.liu.se/c/dmr-on-histories.html |url-status=live }}</ref> और थॉम्पसन ने वाक्य-विन्यास को कम शब्दयुक्त होने के लिए संशोधित किया और सरलीकृत ऐल्गॉल के समान जिसे SM ऐल्गॉल के रूप में जाना जाता है।<ref name="Ars">{{Cite web |last=Jensen |first=Richard |date=9 December 2020 |title="एक लानत बेवकूफी की बात" - सी की उत्पत्ति|url=https://arstechnica.com/features/2020/12/a-damn-stupid-thing-to-do-the-origins-of-c/ |access-date=2022-03-28 |website=Ars Technica |language=en-us}}</ref> परिणाम यह था कि थॉम्पसन ने B (प्रोग्रामिंग भाषा) कहा था।<ref name="sigplan" />उन्होंने B को बहुत सारे SM ऐल्गॉल वाक्य-विन्यास के साथ BC PL शब्दार्थ के रूप में वर्णित किया था।<ref name=Ars /> BCPL मुख्य रूप से B के पास नई मशीनों को पोर्ट करने की सुविधा के लिए [[बूटस्ट्रैपिंग]] संकलक था।<ref name=Ars />चूँकि, कुछ उपयोगिताएँ अंततः B में लिखी गईं क्योंकि यह बहुत धीमी थी, और PDP-11 सुविधाओं जैसे [[बाइट]] संबोधनीयता का लाभ नहीं उठा सकती थी। | ||
==== नई B और प्रथम C मुक्त करना ==== | ==== नई B और प्रथम C मुक्त करना ==== | ||
1971 में अधिक शक्तिशाली PDP -11 की विशेषताओं का उपयोग करने के लिए, रिची ने B में सुधार करना प्रारंभ किया। महत्वपूर्ण जोड़ चरित्र प्रकार था। उन्होंने इसे नई B कहा।<ref name=Ars /> थॉम्पसन ने [[अनुसंधान यूनिक्स]] कर्नेल लिखने के लिए NB का उपयोग करना प्रारंभ किया और उनकी आवश्यकताओं ने भाषा के विकास की दिशा को आकार दिया।<ref name="Ars" /><ref name="unixport" /> 1972 तक, NB भाषा में समृद्ध प्रकार जोड़े गए: NB के पास सरणी याँ थीं <code>int</code> तथा <code>Char</code>. सूचक , अन्य प्रकार के सूचक उत्पन्न करने की क्षमता, सभी प्रकार की | 1971 में अधिक शक्तिशाली PDP -11 की विशेषताओं का उपयोग करने के लिए, रिची ने B में सुधार करना प्रारंभ किया। महत्वपूर्ण जोड़ चरित्र प्रकार था। उन्होंने इसे नई B कहा।<ref name=Ars /> थॉम्पसन ने [[अनुसंधान यूनिक्स]] कर्नेल लिखने के लिए NB का उपयोग करना प्रारंभ किया और उनकी आवश्यकताओं ने भाषा के विकास की दिशा को आकार दिया।<ref name="Ars" /><ref name="unixport" /> 1972 तक, NB भाषा में समृद्ध प्रकार जोड़े गए: NB के पास सरणी याँ थीं <code>int</code> तथा <code>Char</code>. सूचक , अन्य प्रकार के सूचक उत्पन्न करने की क्षमता, सभी प्रकार की सरणियाँ, और फ़ंक्शन से लौटाए जाने वाले प्रकार भी जोड़े गए। अभिव्यक्तियों के भीतर सरणी याँ संकेत बन गईं। नया संकलक लिखा गया था, और भाषा का नाम बदलकर C कर दिया गया था।<ref name=sigplan /> | ||
C संकलक और इसके साथ बनाई गई कुछ उपयोगिताओं को संस्करण 2 यूनिक्स में सम्मलित किया गया था, जिसे अनुसंधान यूनिक्स के रूप में भी जाना जाता है।<ref name="QtqTh">{{cite techreport |first=M. D. |last=McIlroy |author-link=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |title=एक रिसर्च यूनिक्स रीडर: प्रोग्रामर मैनुअल, 1971-1986 से एनोटेट किए गए अंश|series=CSTR |number=139 |institution=Bell Labs |format=PDF |page=10 |access-date=February 1, 2015 |archive-date=November 11, 2017 |archive-url=https://web.archive.org/web/20171111151817/http://www.cs.dartmouth.edu/~doug/reader.pdf |url-status=live }}</ref> | C संकलक और इसके साथ बनाई गई कुछ उपयोगिताओं को संस्करण 2 यूनिक्स में सम्मलित किया गया था, जिसे अनुसंधान यूनिक्स के रूप में भी जाना जाता है।<ref name="QtqTh">{{cite techreport |first=M. D. |last=McIlroy |author-link=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |title=एक रिसर्च यूनिक्स रीडर: प्रोग्रामर मैनुअल, 1971-1986 से एनोटेट किए गए अंश|series=CSTR |number=139 |institution=Bell Labs |format=PDF |page=10 |access-date=February 1, 2015 |archive-date=November 11, 2017 |archive-url=https://web.archive.org/web/20171111151817/http://www.cs.dartmouth.edu/~doug/reader.pdf |url-status=live }}</ref> | ||
==== संरचनाएं और यूनिक्स कर्नेल पुनर्लेखन ==== | ==== संरचनाएं और यूनिक्स कर्नेल पुनर्लेखन ==== | ||
संस्करण 4 यूनिक्स में, नवंबर 1973 में | संस्करण 4 यूनिक्स में, नवंबर 1973 में प्रस्तुत किया गया, यूनिक्स [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल (संचालन प्रणाली)]] को C में बड़े पैमाने पर फिर से लागू किया गया हैं।<ref name="sigplan" /> इस समय तक,सी भाषा ने कुछ शक्तिशाली विशेषताएं प्राप्त कर ली थीं जैसे कि <code>struct</code> का उपयोग किया जाता हैं। | ||
C पूर्वप्रक्रमक को 1973 के आसपास [[एलन स्नाइडर (कंप्यूटर वैज्ञानिक)]] के आग्रह पर प्रस्तुत किया गया था और BCPL और PL/I में उपलब्ध फ़ाइल-समावेशन तंत्र की उपयोगिता की मान्यता में भी। इसके मूल संस्करण में केवल फाइलें और सरल स्ट्रिंग प्रतिस्थापन सम्मलित हैं: <code>#include</code> तथा <code>#define</code> पैरामीटर रहित मैक्रोज़ इसके तुरंत बाद, इसे तर्क और प्रतिबंधात्मक संकलन के साथ मैक्रोज़ को सम्मलित करने के लिए, अधिकांशतः [[माइक लेस्क]] और फिर जॉन रेसर द्वारा विस्तारित किया गया था।<ref name="sigplan">{{harvtxt|Ritchie|1993}}</ref> यूनिक्स भाषा के अतिरिक्त किसी अन्य भाषा में लागू किए गए पहले संचालन प्रणाली कर्नेल में से था। पहले के उदाहरणों में 1961 में [[बरोज़ लार्ज सिस्टम्स|बरोज़ लार्ज प्रणाली्स]] जो ऐल्गॉल में लिखा गया था [[मॉलटिक्स]] प्रणाली के लिए जो PL/I में लिखा गया था और बरोज़ MC P (MC P) सम्मलित हैं। 1977, रिची और स्टीफन सी. जॉनसन ने यूनिक्स संचालन प्रणाली की सुवाह्यता को सुविधाजनक बनाने के लिए भाषा में और परिवर्तन किए जाते हैं। इस प्रकार जॉनसन के [[पोर्टेबल सी कंपाइलर|सुवाहय़ C]] संकलक ने नए प्लेटफॉर्म पर C के कई कार्यान्वयनों के आधार के रूप में कार्य किया।<ref name="unixport">{{cite journal |last1=Johnson |first1=S. C. |author-link1=Stephen C. Johnson |last2=Ritchie |first2=D. M. |author-link2=Dennis Ritchie |title=सी प्रोग्राम और यूनिक्स सिस्टम की सुवाह्यता|journal=Bell System Tech. J. |year=1978 |volume=57 |issue=6 |pages=2021–2048 |doi=10.1002/j.1538-7305.1978.tb02141.x |citeseerx=10.1.1.138.35 |s2cid=17510065}} (Note: The PDF is an OCR scan of the original, and contains a rendering of "IBM 370" as "IBM 310".)</ref> | |||
=== K और R C === | === K और R C === | ||
[[File:The C Programming Language, First Edition Cover (2).svg|thumb|240x240px| | [[File:The C Programming Language, First Edition Cover (2).svg|thumb|240x240px|सी प्रोग्रामिंग भाषा पुस्तक का कवर, पहला संस्करण, [[ब्रायन कर्निघन]] और डेनिस रिची द्वारा]]1978 में, ब्रायन कर्निघन और डेनिस रिची ने सी प्रोग्रामिंग [[सी प्रोग्रामिंग लैंग्वेज|भाषा]] का पहला संस्करण प्रकाशित किया।<ref name="k&r1e">{{cite book |last1=Kernighan |first1=Brian W. |author-link1=Brian Kernighan |last2=Ritchie |first2=Dennis M. |author-link2=Dennis Ritchie | title=सी प्रोग्रामिंग लैंग्वेज| edition=1st |publisher=[[Prentice Hall]] |date=February 1978 |location=[[Englewood Cliffs, NJ]] |isbn=978-0-13-110163-0|title-link=सी प्रोग्रामिंग लैंग्वेज(book)}}</ref> C प्रोग्राम को K और R, C के रूप में जाना जाने वाला यह पुस्तक, भाषा के अनौपचारिक विशिष्टता (तकनीकी स्टैंडर्ड) के रूप में कई वर्षों तक कार्य करता था। C के जिस संस्करण का वर्णन करता है उसे सामान्यतः 'के और आर सी ' के रूप में संदर्भित किया जाता है। जैसा कि यह 1978 में प्रस्तुत किया गया था, इसे C 78 भी कहा जाता है।<ref name="qOvzA">{{cite book |url=https://nxmnpg.lemoda.net/7/c78 |title=FreeBSD विविध सूचना मैनुअल|date=30 May 2011 |edition=FreeBSD 13.0 |chapter=C manual pages |access-date=January 15, 2021 |archive-url=https://web.archive.org/web/20210121024455/https://nxmnpg.lemoda.net/7/c78 |archive-date=January 21, 2021 |url-status=live}} [https://www.freebsd.org/cgi/man.cgi?query=c78&apropos=0&sektion=0&manpath=FreeBSD+9-current&arch=default&format=html] {{Webarchive|url=https://web.archive.org/web/20210121033654/https://www.freebsd.org/cgi/man.cgi?query=c78&apropos=0&sektion=0&manpath=FreeBSD+9-current&arch=default&format=html|date=January 21, 2021}}</ref> पुस्तक का दूसरा संस्करण<ref name="k&r2e">{{cite book |last1=Kernighan |first1=Brian W. |author-link1=Brian Kernighan |last2=Ritchie |first2=Dennis M. |author-link2=Dennis Ritchie |title=सी प्रोग्रामिंग लैंग्वेज| edition=2nd |publisher=[[Prentice Hall]] |date=March 1988 |location=[[Englewood Cliffs, NJ]] |isbn=978-0-13-110362-7|title-link=सी प्रोग्रामिंग लैंग्वेज(book) |ref=none}}</ref> नीचे वर्णित ANSIC स्टैंडर्ड को सम्मलित करता है। | ||
K और R C ने कई भाषा सुविधाओं प्रारंभ की। | K और R C ने कई भाषा सुविधाओं प्रारंभ की। | ||
* | * स्टैंडर्ड I/O लाइब्रेरी | ||
* <code>long int</code> डेटा प्रकार | * <code>long int</code> डेटा प्रकार | ||
* <code>unsigned int</code> डेटा प्रकार | * <code>unsigned int</code> डेटा प्रकार | ||
* फॉर्म के कंपाउंड कार्यभार ऑपरेटर <code>=''op''</code> (जैसे कि <code>=-</code>) के रूप में बदल दिए गए थे <code>''op''=</code> (वह है, <code>-=</code>) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिए <code>i=-10</code>, जिसकी व्याख्या की गई थी <code>i =- 10</code> ( | * फॉर्म के कंपाउंड कार्यभार ऑपरेटर <code>=''op''</code> (जैसे कि <code>=-</code>) के रूप में बदल दिए गए थे <code>''op''=</code> (वह है, <code>-=</code>) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिए <code>i=-10</code>, जिसकी व्याख्या की गई थी <code>i =- 10</code> ( <code>i</code> में 10 का कमी) संभवतः प्रयोजन के अतिरिक्त <code>i=-10</code> हो, तो <code>i</code> -10 होने देना। | ||
1989 के ANSI | 1989 के ANSI स्टैंडर्ड के प्रकाशन के बाद भी, कई वर्षों तक के और R C को अभी भी सबसे कम सामान्य विभाजक (कंप्यूटर) माना जाता था, जब अधिकतम सुवाह्यता वांछित होने पर C प्रोग्राम ने स्वत: को प्रतिबंधित कर दिया था, क्योंकि कई पुराने संकलक अभी भी उपयोग में थे और क्योंकि सावधानी से लिखा गया था K&RC संकेत कानूनी स्टैंडर्ड C भी हो सकता है। | ||
C के प्रारंभिक संस्करणों में, केवल ऐसे कार्य जो अन्य प्रकारों को वापस करते हैं <code>int</code> फ़ंक्शन परिभाषा से पहले उपयोग किए जाने पर घोषित किया जाना चाहिए पूर्व घोषणा के अतिरिक्त उपयोग किए गए कार्यों को वापसी प्रकार माना जाता था <code>int</code>. | C के प्रारंभिक संस्करणों में, केवल ऐसे कार्य जो अन्य प्रकारों को वापस करते हैं <code>int</code> फ़ंक्शन परिभाषा से पहले उपयोग किए जाने पर घोषित किया जाना चाहिए पूर्व घोषणा के अतिरिक्त उपयोग किए गए कार्यों को वापसी प्रकार माना जाता था <code>int</code>. | ||
उदाहरण के लिए: | उदाहरण के लिए:<blockquote>long some_function(); /* This is a function declaration, so the compiler can know the name and return type of this function. */ | ||
/* int */ other_function(); /* Another function declaration. Because this is an early version of C, there is an implicit 'int' type here. A comment shows where the explicit 'int' type specifier would be required in later versions. */ | |||
/* int */ calling_function() /* This is a function definition, including the body of the code following in the { curly brackets }. Because no return type is specified, the function implicitly returns an 'int' in this early version of C. */ | |||
{ | |||
long test1; | |||
register /* int */ test2; /* Again, note that 'int' is not required here. The 'int' type specifier */ | |||
/* in the comment would be required in later versions of C. */ | |||
/* The 'register' keyword indicates to the compiler that this variable should */ | |||
/* ideally be stored in a register as opposed to within the stack frame. */ | |||
test1 = some_function(); | |||
if (test1 > 1) | |||
test2 = 0; | |||
else | |||
test2 = other_function(); | |||
return test2; | |||
} | |||
/ | </blockquote>इस प्रारूप में विनिर्देशक जो टिप्पणी की गई हैं उन्हें के और R C में छोड़ा जा सकता है, किन्तु बाद के स्टैंडर्डों में आवश्यक हैं। | ||
चूंकि K और R C फ़ंक्शन घोषणा ओं में फ़ंक्शन तर्कों के बारे में कोई जानकारी सम्मलित नहीं थी, फ़ंक्शन पैरामीटर प्रकार की जांच नहीं की गई थी, चूंकि कुछ संकलक चेतावनी संदेश | चूंकि K और R C फ़ंक्शन घोषणा ओं में फ़ंक्शन तर्कों के बारे में कोई जानकारी सम्मलित नहीं थी, फ़ंक्शन पैरामीटर प्रकार की जांच नहीं की गई थी, चूंकि कुछ संकलक चेतावनी संदेश प्रस्तुत करेंगे यदि किसी स्थानीय फ़ंक्शन को तर्कों की गलत संख्या के साथ बुलाया गया था, या यदि बाहरी फ़ंक्शन पर कॉल विभिन्न संख्याओं या प्रकार के तर्कों का उपयोग किया। यूनिक्स की [[लिंट प्रोग्रामिंग टूल|लिंट प्रोग्रामिंग]] उपकरण उपयोगिता जैसे अलग उपकरण विकसित किए गए थे जो अन्य बातों के अतिरिक्त कई स्रोत फ़ाइलों में फ़ंक्शन उपयोग की निरंतरता की जांच कर सकते थे। | ||
K और R C के प्रकाशन के बाद के वर्षों में, AT और T विशेष रूप से सुवाहय़ C के संकलक द्वारा समर्थित भाषा में कई विशेषताएं जोड़ी गईं।<ref name="SkKfZ">{{cite report |first1=Bjarne |last1=Stroustrup |author-link=Bjarne Stroustrup |title=सहोदर प्रतिद्वंद्विता: C और C++|publisher=AT&T Labs |number=TD-54MQZY |year=2002 |url=http://stroustrup.com/sibling_rivalry.pdf |access-date=April 14, 2014 |archive-date=August 24, 2014 |archive-url=https://web.archive.org/web/20140824072719/http://www.stroustrup.com/sibling_rivalry.pdf |url-status=live }}</ref> और कुछ अन्य विक्रेता इनमें सम्मलित हैं: | K और R C के प्रकाशन के बाद के वर्षों में, AT और T विशेष रूप से सुवाहय़ C के संकलक द्वारा समर्थित भाषा में कई विशेषताएं जोड़ी गईं।<ref name="SkKfZ">{{cite report |first1=Bjarne |last1=Stroustrup |author-link=Bjarne Stroustrup |title=सहोदर प्रतिद्वंद्विता: C और C++|publisher=AT&T Labs |number=TD-54MQZY |year=2002 |url=http://stroustrup.com/sibling_rivalry.pdf |access-date=April 14, 2014 |archive-date=August 24, 2014 |archive-url=https://web.archive.org/web/20140824072719/http://www.stroustrup.com/sibling_rivalry.pdf |url-status=live }}</ref> और कुछ अन्य विक्रेता इनमें सम्मलित हैं: | ||
Line 158: | Line 163: | ||
* प्रगणित प्रकार पहले, पूर्णांक निश्चित मानों के लिए पूर्वप्रक्रमक परिभाषाएँ उपयोग की जाती थीं, उदा <code>#define GREEN 3</code>) | * प्रगणित प्रकार पहले, पूर्णांक निश्चित मानों के लिए पूर्वप्रक्रमक परिभाषाएँ उपयोग की जाती थीं, उदा <code>#define GREEN 3</code>) | ||
[[सी मानक पुस्तकालय|C | [[सी मानक पुस्तकालय|C स्टैंडर्ड लाइब्रेरी]] पर बड़ी संख्या में विस्तार और समझौते की कमी, साथ में भाषा की लोकप्रियता और तथ्य यह है कि यूनिक्स संकलनकर्ता ने भी K और R C विनिर्देशन को त्रुटिहीन रूप से लागू नहीं किया, जिससे स्टैंडर्डीकरण की आवश्यकता हुई। | ||
=== ANSI C और ISO C === | === ANSI C और ISO C === | ||
{{Main|ANSI C}} | {{Main|ANSI C}} | ||
Line 167: | Line 169: | ||
1970 और 1980 के दशक के अंत में, IBM PC सहित विभिन्न प्रकार के [[मेनफ़्रेम कंप्यूटर]], [[मिनी कंप्यूटर]] और [[माइक्रो]] कंप्यूटर के लिए C के संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में अधिक वृद्धि होने लगी थी। | 1970 और 1980 के दशक के अंत में, IBM PC सहित विभिन्न प्रकार के [[मेनफ़्रेम कंप्यूटर]], [[मिनी कंप्यूटर]] और [[माइक्रो]] कंप्यूटर के लिए C के संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में अधिक वृद्धि होने लगी थी। | ||
1983 में, अमेरिकी राष्ट्रीय | 1983 में, अमेरिकी राष्ट्रीय स्टैंडर्ड संस्थान (ANSI) ने यूनिक्स कार्यान्वयन पर C स्टैंडर्ड के आधार पर C . X3J11 के स्टैंडर्ड विनिर्देश स्थापित करने के लिए समिति, X3J11 का गठन किया चूंकि, यूनिक्स C लाइब्रेरी के अ-सुवाहय़ भाग को 1988 के [[POSIX]] स्टैंडर्ड का आधार बनने के लिए [[इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स|इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल और इलेक्ट्रॉनिक्स इंजीनियर्स]] कार्यरत समूह 1003 को सौंप दिया गया था। 1989 में,C स्टैंडर्ड को ANSI X3.159-1989 प्रोग्रामिंग भाषाC के रूप में अनुमोदित किया गया था। भाषा के इस संस्करण को अधिकांशतः ANSI C , स्टैंडर्ड C , या कभी-कभी C 89 के रूप में संदर्भित किया जाता है। | ||
1990 में, ANSIC | 1990 में, ANSIC स्टैंडर्ड स्वरूपण परिवर्तनों के साथ को अंतर्राष्ट्रीय स्टैंडर्डीकरण संगठन (ISO) द्वारा ISO/IEC 9899:1990 के रूप में अपनाया गया था, जिसे कभी-कभी C 90 कहा जाता है। इसलिए, C 89 और C 90 शब्द ही प्रोग्रामिंग भाषा को संदर्भित करते हैं। | ||
ANSI, अन्य राष्ट्रीय | ANSI, अन्य राष्ट्रीय स्टैंडर्ड निकायों की प्रकार , अब C स्टैंडर्ड को स्वतंत्र रूप से विकसित नहीं करता है, किन्तु कार्य समूह ISO/IEC JTC 1/SC 22/WG14 द्वारा बनाए गए अंतर्राष्ट्रीय C स्टैंडर्ड को टाल देता है। अंतरराष्ट्रीय स्टैंडर्ड के लिए अद्यतन का राष्ट्रीय अंगीकरण सामान्यतः ISO प्रकाशन के वर्ष के भीतर होता है। | ||
C | C स्टैंडर्डीकरण प्रक्रिया के उद्देश्यों में से K और R C C के उत्तम चयन का निर्माण करना था, जिसमें बाद में प्रारंभ की गई अनौपचारिक सुविधाओं में से कई सम्मलित थे। स्टैंडर्ड समिति में कई अतिरिक्त सुविधाएँ भी सम्मलित हैं जैसे कि [[फ़ंक्शन प्रोटोटाइप|फ़ंक्शन प्रोटोप्ररूप]] C ++ से उद्धृत लिया गया , <code>void</code> सूचक , अंतर्राष्ट्रीय वर्ण कूट लेखन और स्थान कंप्यूटर सॉफ़्टवेयर और पूर्वप्रक्रमक वृद्धि के लिए समर्थन। चूंकि पैरामीटर घोषणा ओं के लिए C वाक्य-विन्यास को C ++ में उपयोगी की जाने वाली शैली को सम्मलित करने के लिए संवर्धित किया गया था, उपस्तिथा स्रोत संकेत के साथ संगतता के लिए K और R C अंतराफलक की अनुमति प्रस्तुत रही हैं। | ||
C 89 वर्तमानC संकलक द्वारा समर्थित है, और अधिकांश आधुनिक C | C 89 वर्तमानC संकलक द्वारा समर्थित है, और अधिकांश आधुनिक C संकेत इस पर आधारित है। कोई भी प्रोग्राम केवल स्टैंडर्ड C में लिखा गया है और अतिरिक्त किसी हार्डवेयर-निर्भर धारणा के किसी भी [[कम्प्यूटिंग मंच]] पर अनुरूप C कार्यान्वयन के साथ, इसकी संसाधन सीमा के भीतर सही ढंग से चलेगा। ऐसी सावधानियों के अतिरिक्त , प्रोग्राम केवल निश्चित प्लेटफॉर्म पर या किसी विशेष संकलक के साथ संकलित हो सकते हैं, उदाहरण के लिए, A-स्टैंडर्ड लाइब्रेरी के उपयोग के लिए जैसे कि [[ग्राफिकल यूज़र इंटरफ़ेस|ग्राफिकल उपयोगकर्ता]] अंतराफलक लाइब्रेरी, या संकलक - या प्लेटफॉर्म-विशिष्ट पर निर्भरता विशेषताएँ जैसे कि डेटा प्रकारों का त्रुटिहीन आकार और बाइट [[endianness|अंत में]] किया जाता हैं। | ||
ऐसे स्थितियों में जहां | ऐसे स्थितियों में जहां संकेत को स्टैंडर्ड-अनुरूप K और R C आधारित संकलनकर्ता द्वारा संकलित किया जाना चाहिए, <code>__STDC __</code> केवल स्टैंडर्ड C में उपलब्ध सुविधाओं के K और R C आधारित संकलक पर उपयोग को रोकने के लिए मैक्रो का उपयोग स्टैंडर्ड और K और R C वर्गों में संकेत को विभाजित करने के लिए किया जा सकता है। | ||
ANSI/ISO स्टैंडर्डीकरण प्रक्रिया के बाद,सी भाषा विनिर्देश कई वर्षों तक अपेक्षाकृत स्थिर रहा। 1995 में, 1990C स्टैंडर्ड ISO/IEC 9899/AMD1:1995, अनौपचारिक रूप से C 95 के रूप में जाना जाता है स्टैंडर्ड संशोधन के लिए 1 प्रकाशित किया गया था, कुछ विवरणों को सही करने और अंतर्राष्ट्रीय चरित्र सेटों के लिए अधिक व्यापक समर्थन जोड़ने के लिए।<ref name="NWUon">{{cite book |author=<!--Staff writer(s); no by-line.--> |title=सी अखंडता|url=https://www.iso.org/standard/23909.html |publisher=International Organization for Standardization |date=March 30, 1995 |access-date=July 24, 2018 |archive-date=July 25, 2018 |archive-url=https://web.archive.org/web/20180725033429/https://www.iso.org/standard/23909.html |url-status=live }}</ref> | |||
=== अपार्टमेंट === | |||
{{Main|सी99}} | |||
1990 के दशक के अंत में C स्टैंडर्ड को और संशोधित किया गया, जिससे 1999 में ISO/IEC 9899:1999 का प्रकाशन हुआ, जिसे सामान्यतः [[C99|C 99]] कहा जाता है। तब से इसे तकनीकी शुद्धिपत्र द्वारा तीन बार संशोधित किया गया है।<ref name="WG14">{{cite web |title=JTC1/SC22/WG14 - सी|url=http://www.open-std.org/jtc1/sc22/wg14/ |work=Home page |publisher=ISO/IEC |access-date=June 2, 2011 |archive-date=February 12, 2018 |archive-url=https://web.archive.org/web/20180212100115/http://www.open-std.org/JTC1/SC22/WG14/ |url-status=live }}</ref>C 99 ने कई नई सुविधाएँ प्रस्तुत कीं, जिनमें [[इनलाइन फ़ंक्शन|इनपंक्ति फ़ंक्शन]], कई नए [[डेटा प्रकार]] (सहित <code>long long int</code> और A <code>Complex</code> [[जटिल संख्या]]ओं का प्रतिनिधित्व करने के लिए प्ररूप करें), चर-लंबाई सरणी यों और लचीले सरणी सदस्यों, [[IEEE 754]] तैरनेवाला स्थल के लिए श्रेष्ठतर समर्थन, वैरिएडिक मैक्रोज़ के लिए समर्थन चर के मैक्रोज़ और -पंक्ति टिप्पणियों के साथ प्रारंभ होने के लिए समर्थन <code>//</code>, जैसे BCPL या C++ में। इनमें से कई पहले से ही कई C संकलनकर्ता रूप में लागू किए गए थे। | |||
1990 के दशक के अंत में C | |||
C 99 अधिकांश भाग के लिए C 90 के साथ संगत है, किन्तु कुछ मायनों में | C 99 अधिकांश भाग के लिए C 90 के साथ संगत है, किन्तु कुछ मायनों में दृढ़ है विशेष रूप से, घोषणा जिसमें प्रकार के विनिर्देशक का अभाव है, अब नहीं है <code>int</code> परोक्ष रूप से मान लिया। स्टैंडर्ड मैक्रो <code>__STDC _VERSION__</code> मान से परिभाषित किया गया है <code>199901L</code> यह इंगित करने के लिए कि C 99 समर्थन उपलब्ध है। [[जीएनयू संकलक संग्रह|GNU संकलक संग्रह]], [[सन स्टूडियो (सॉफ्टवेयर)]], और अन्यC संकलक अब C 99 की कई या सभी नई सुविधाओं का समर्थन करें। [[Microsoft Visual C++|माइक्रोसाफ्ट विजुअल C ++]] मेंC संकलक , चूँकि, C 89 स्टैंडर्ड और C 99 के उन हिस्सों को लागू करता है जो [[C++11|C ++11]] के साथ संगतता के लिए आवश्यक हैं।<ref name="YTKIv">{{cite web |url=http://www.drdobbs.com/cpp/interview-with-herb-sutter/231900562 |title=हर्ब सटर के साथ साक्षात्कार|website=[[Dr. Dobbs]] |author=Andrew Binstock |date=October 12, 2011 |access-date=September 7, 2013 |archive-date=August 2, 2013 |archive-url=https://web.archive.org/web/20130802070446/http://www.drdobbs.com/cpp/interview-with-herb-sutter/231900562 |url-status=live }}</ref> इसके अतिरिक्त, स्टैंडर्ड बचने वाले पात्रों के रूप में यूनिसंकेत पहचानकर्ताओं चर/फ़ंक्शन नाम के लिए समर्थन की आवश्यकता है (उदाहरण। {{code|\U0001f431}}) और अपरिष्कृत यूनिसंकेत नामों के लिए समर्थन का सुझाव देता है। | ||
=== C 11 === | === C 11 === | ||
{{Main|C11 (C मानक संशोधन)}} | {{Main|C11 (C मानक संशोधन)}} | ||
2007 में,C | 2007 में,C स्टैंडर्ड और संशोधन पर कार्य प्रारंभ हुआ, जिसे अनौपचारिक रूप से C 1X कहा जाता है। जब तक कि 2011-12-08 को ISO/IEC 9899:2011 का आधिकारिक प्रकाशन नहीं हो गया।C स्टैंडर्ड समिति ने उन नई विशेषताओं को अपनाने की सीमा तय करने के लिए दिशा-निर्देशों को अपनाया जिनका उपस्तिथा कार्यान्वयनों द्वारा परीक्षण नहीं किया गया था। | ||
C 11 | C 11 स्टैंडर्डC और लाइब्रेरी में कई नई सुविधाएँ जोड़ता है, जिसमें प्ररूप जेनेरिक मैक्रोज़, अनाम संरचनाएँ, श्रेष्ठतर यूनिसंकेत समर्थन, परमाणु संचालन, बहु- थ्रेडिंग और सीमा-जांच कार्य सम्मलित हैं। यह उपस्तिथा C 99 लाइब्रेरी के कुछ अंशों को वैकल्पिक भी बनाता है और C ++ के साथ संगतता में सुधार करता है। स्टैंडर्ड मैक्रो <code>__STDC _VERSION__</code> की प्रकार परिभाषित किया गया है <code>201112L</code> यह इंगित करने के लिए कि C 11 समर्थन उपलब्ध है। | ||
=== C17 === | === C17 === | ||
{{Main|C17 (C मानक संशोधन)}} | {{Main|C17 (C मानक संशोधन)}} | ||
जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C | जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C 17 सी प्रोग्रामिंग भाषा के लिए वर्तमान स्टैंडर्ड है। यह C 11 में दोषों के लिए कोई नई भाषा सुविधाएँ केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। स्टैंडर्ड मैक्रो <code>__STDC _VERSION__</code> की प्रकार परिभाषित किया गया है <code>201710L</code>. | ||
=== C2 === | === C2 === | ||
{{Main|C2x}} | {{Main|C2x}} | ||
C 2x अगले C 17 के बाद प्रमुख | C 2x अगले C 17 के बाद प्रमुख सी भाषा स्टैंडर्ड संशोधन के लिए अनौपचारिक नाम है। इसके 2023 में मतदान होने की उम्मीद है और इसलिए इसे C 23 कहा जाएगा।<ref>{{Cite web |title=संशोधित C23 अनुसूची WG 14 N 2984|url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2984.pdf |url-status=live |archive-url=https://web.archive.org/web/20221013182241/https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2984.pdf |archive-date=October 13, 2022 |access-date=2022-10-28 |website=www.open-std.org}}</ref> | ||
Line 208: | Line 210: | ||
{{Main|अंतर्निहित C}} | {{Main|अंतर्निहित C}} | ||
ऐतिहासिक रूप से, अंतर्निहित | ऐतिहासिक रूप से, अंतर्निहित सी प्रोग्रामिंग को सी भाषा के लिए अ-स्टैंडर्ड की आवश्यकता होती है जिससे कि नियत बिन्दु अंकगणित, कई अलग-अलग मेमोरी बैंक और आधारभूत I/O संचालन जैसी विदेशी विशेषताओं का समर्थन किया जा सके। | ||
2008 में,C | 2008 में,C स्टैंडर्ड समिति नेसी भाषा का विस्तार करते हुए [[तकनीकी रिपोर्ट]] प्रकाशित की<ref name="TR18037">{{cite web |title=टीआर 18037: एंबेडेड सी|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1169.pdf |publisher=ISO / IEC |access-date=July 26, 2011 |archive-date=February 25, 2021 |archive-url=https://web.archive.org/web/20210225224616/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1169.pdf |url-status=live }}</ref> पालन करने के लिए सभी कार्यान्वयन के लिए सामान्य स्टैंडर्ड प्रदान करके इन मुद्दों को हल करने के लिए इसमें कई विशेषताएं सम्मलित हैं जो सामान्य C में उपलब्ध नहीं हैं, जैसे निश्चित-बिंदु अंकगणित, नामित पता स्थान और मूल I/O हार्डवेयर एड्रेसिंग। | ||
== सिंटेक्स == | == सिंटेक्स == | ||
{{Main|C सिंटेक्स}} | {{Main|C सिंटेक्स}} | ||
C मेंC | C मेंC स्टैंडर्ड द्वारा निर्दिष्ट [[औपचारिक व्याकरण]] है।<ref name="h&s5e">{{cite book |last1=Harbison |first1=Samuel P. |last2=Steele |first2=Guy L. |author-link2=Guy L. Steele, Jr. |title=सी: एक संदर्भ मैनुअल|edition=5th |publisher=[[Prentice Hall]] |year=2002 |location=[[Englewood Cliffs, NJ]] |isbn=978-0-13-089592-9}} Contains a [[Backus-Naur form|BNF]] grammar for C.</ref> रेखा के अंत सामान्यतःC में महत्वपूर्ण नहीं होते हैं चूँकि, पूर्वप्रक्रमण चरण के पर्यन्त पंक्ति सीमाओं का महत्व होता है। टिप्पणियाँ या तो सीमांकक के बीच दिखाई दे सकती हैं <code>/*</code> तथा <code>*/</code>, या (C 99 के बाद से) निम्नलिखित <code>//</code> पंक्ति के अंत तक द्वारा सीमांकित टिप्पणियाँ <code>/*</code> तथा <code>*/</code> घोंसला न करें, और वर्णों के इन अनुक्रमों को टिप्पणी सीमांकक के रूप में व्याख्या नहीं किया जाता है यदि वे स्ट्रिंग शाब्दिक या वर्ण शाब्दिक के अंदर दिखाई देते हैं।{{sfnp|Kernighan|Ritchie|1988|p=192}}C स्रोत फ़ाइलों में घोषणाएँ और फ़ंक्शन परिभाषाएँ होती हैं। फ़ंक्शन परिभाषाएँ, बदले में, घोषणाएँ और कथन (कंप्यूटर विज्ञान) सम्मलित करती हैं। घोषणाएँ या तो कीवर्ड का उपयोग करके नए प्रकारों को परिभाषित करती हैं जैसे <code>struct</code>, <code>union</code>, तथा <code>enum</code>, या प्ररूप निर्धारण करें और संभवतः नए चर के लिए भंडारण आरक्षित करें, सामान्यतः चरनाम के बाद प्ररूप लिखकर। कीवर्ड जैसे <code>Char</code> तथा <code>int</code> अंतर्निहित प्रकार निर्दिष्ट करें। संकेत के अनुभाग कोष्ठकों में संलग्न हैं (<code>{</code> तथा <code>}</code>, कभी-कभी घुंघराले ब्रैकेट कहा जाता है। घोषणा ओं के सीमाको सीमित करने और नियंत्रण संरचनाओं के लिए ल कथन के रूप में कार्य करने के लिए हैं। | ||
अनिवार्य भाषा के रूप में,C क्रियाओं को निर्दिष्ट करने के लिए कथनों का उपयोग करता है। सबसे साधारण विवरण अभिव्यक्ति विवरण है, जिसमें मूल्यांकन की जाने वाली अभिव्यक्ति सम्मलित है। जिसके बाद अर्धविराम होता है मूल्यांकन के [[साइड इफेक्ट (कंप्यूटर विज्ञान)|पार्श्व प्रभाव (कंप्यूटर विज्ञान)]] के रूप में, कार्य [[प्रक्रिया कॉल]] हो सकते हैं और चर कार्यभार कंप्यूटर विज्ञान नए मान हो सकते हैं। विवरणों के सामान्य अनुक्रमिक निष्पादन को संशोधित करने के लिए, C आरक्षित खोज शब्दों द्वारा पहचाने जाने वाले कई नियंत्रण-प्रवाह विवरण प्रदान करता है। संरचित प्रोग्रामिंग द्वारा समर्थित है <code>if</code> ... [<code>else</code>] प्रतिबंधात्मक निष्पादन और द्वारा <code>do</code> ... <code>while</code>, <code>while</code>, तथा <code>for</code> पुनरावृत्त निष्पादन (लूपिंग)। <code>for</code> e> | अनिवार्य भाषा के रूप में,C क्रियाओं को निर्दिष्ट करने के लिए कथनों का उपयोग करता है। सबसे साधारण विवरण अभिव्यक्ति विवरण है, जिसमें मूल्यांकन की जाने वाली अभिव्यक्ति सम्मलित है। जिसके बाद अर्धविराम होता है मूल्यांकन के [[साइड इफेक्ट (कंप्यूटर विज्ञान)|पार्श्व प्रभाव (कंप्यूटर विज्ञान)]] के रूप में, कार्य [[प्रक्रिया कॉल]] हो सकते हैं और चर कार्यभार कंप्यूटर विज्ञान नए मान हो सकते हैं। विवरणों के सामान्य अनुक्रमिक निष्पादन को संशोधित करने के लिए, C आरक्षित खोज शब्दों द्वारा पहचाने जाने वाले कई नियंत्रण-प्रवाह विवरण प्रदान करता है। संरचित प्रोग्रामिंग द्वारा समर्थित है <code>if</code> ... [<code>else</code>] प्रतिबंधात्मक निष्पादन और द्वारा <code>do</code> ... <code>while</code>, <code>while</code>, तथा <code>for</code> पुनरावृत्त निष्पादन (लूपिंग)। <code>for</code> e> विवरण में अलग-अलग आरंभीकरण , टेस्टिंग और आरंभीकरण हैं, जिनमें से कोई भी या सभी को छोड़ा जा सकता है। <code>break</code> तथा <code>Continue</code> अंतरतम संलग्न लूप विवरण को छोड़ने के लिए उपयोगी किया जा सकता है या इसके पुनर्संरचना पर जा सकता है। अ-संरचित भी है <code>[[goto]]</code> विवरण जो फ़ंक्शन के भीतर सीधे निर्दिष्ट [[लेबल (कंप्यूटर विज्ञान)]] को शाखा करता है। <code>switch</code> A का चयन करता है <code>Case</code> पूर्णांक अभिव्यक्ति के मूल्य के आधार पर निष्पादित किया जाना है। | ||
भाव विभिन्न प्रकार के अंतर्निर्मित ऑपरेटरों का उपयोग कर सकते हैं और इसमें फ़ंक्शन कॉल हो सकते हैं। वह क्रम जिसमें अधिकांश ऑपरेटरों के लिए फ़ंक्शन और ऑपरेंड के तर्कों का मूल्यांकन किया जाता है, अनिर्दिष्ट है। मूल्यांकनों को आपस में जोड़ा भी जा सकता है। चूंकि, सभी दुष्प्रभाव भंडारण से चर सहित अगले [[अनुक्रम बिंदु]] से पहले होंगे अनुक्रम बिंदुओं में प्रत्येक अभिव्यक्ति कथन का अंत, और प्रत्येक फ़ंक्शन कॉल में प्रवेश और वापसी सम्मलित है। कुछ ऑपरेटरों वाले भावों के मूल्यांकन के पर्यन्त अनुक्रम बिंदु भी होते हैं (<code>&&</code>, <code>||</code>, <code>[[?:]]</code> और अल्पविराम ऑपरेटर। यह संकलक द्वारा उच्च स्तर के प्रयोजन | भाव विभिन्न प्रकार के अंतर्निर्मित ऑपरेटरों का उपयोग कर सकते हैं और इसमें फ़ंक्शन कॉल हो सकते हैं। वह क्रम जिसमें अधिकांश ऑपरेटरों के लिए फ़ंक्शन और ऑपरेंड के तर्कों का मूल्यांकन किया जाता है, अनिर्दिष्ट है। मूल्यांकनों को आपस में जोड़ा भी जा सकता है। चूंकि, सभी दुष्प्रभाव भंडारण से चर सहित अगले [[अनुक्रम बिंदु]] से पहले होंगे अनुक्रम बिंदुओं में प्रत्येक अभिव्यक्ति कथन का अंत, और प्रत्येक फ़ंक्शन कॉल में प्रवेश और वापसी सम्मलित है। कुछ ऑपरेटरों वाले भावों के मूल्यांकन के पर्यन्त अनुक्रम बिंदु भी होते हैं (<code>&&</code>, <code>||</code>, <code>[[?:]]</code> और अल्पविराम ऑपरेटर। यह संकलक द्वारा उच्च स्तर के प्रयोजन संकेत अनुकूलन की अनुमति देता है, किन्तु C प्रोग्राम को अन्य प्रोग्रामिंग भाषाओं की तुलना में विश्वसनीय परिणाम प्राप्त करने के लिए अधिक ध्यान देने की आवश्यकता होती है। | ||
कर्निघन और रिची | कर्निघन और रिची सी प्रोग्रामिंग भाषा के परिचय में कहते हैं, C, किसी भी अन्य भाषा की प्रकार इसके दोष हैं। कुछ ऑपरेटरों की गलत प्राथमिकता है वाक्य-विन्यास के कुछ भाग श्रेष्ठतर हो सकते हैं।{{sfnp|Kernighan|Ritchie|1978|p=3}} पहले से उपस्तिथ सॉफ़्टवेयर पर ऐसे परिवर्तनों के प्रभाव के कारण C स्टैंडर्ड ने इनमें से कई दोषों को ठीक करने का प्रयास नहीं किया। | ||
=== अक्षर समुच्चय === | === अक्षर समुच्चय === | ||
Line 232: | Line 234: | ||
नई पंक्ति विवरण पंक्ति के अंत को इंगित करता है यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिए C इसे के रूप में मानता है। | नई पंक्ति विवरण पंक्ति के अंत को इंगित करता है यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिए C इसे के रूप में मानता है। | ||
अतिरिक्त बहु-बाइट एन्कोडेड वर्ण स्ट्रिंग अक्षर में उपयोग किए जा सकते हैं, किन्तु वे पूरी प्रकार से सॉफ़्टवेयर सुवाह्यता नहीं हैं। नवीनतम C | अतिरिक्त बहु-बाइट एन्कोडेड वर्ण स्ट्रिंग अक्षर में उपयोग किए जा सकते हैं, किन्तु वे पूरी प्रकार से सॉफ़्टवेयर सुवाह्यता नहीं हैं। नवीनतम C स्टैंडर्ड C11, C स्टैंडर्ड संशोधन बहु-राष्ट्रीय यूनिसंकेत वर्णों को उपयोग करके C स्रोत पाठ के भीतर आंशिक रूप से लागू करने की अनुमति देता है <code>\uXXXX</code> या <code>\UXXXXXXXX</code> कूट लेखन जहां <code>X</code> हेक्साडेसिमल चरित्र को दर्शाता है, चूंकि यह सुविधा अभी तक व्यापक रूप से लागू नहीं हुई है। | ||
मूल C निष्पादन चरित्र चयन में बेल चरित्र, [[Backspace]] और [[कैरिज रिटर्न|कैरिज वापसी]] के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। चलाने का समय प्रोग्राम जीवनचक्र चरण | C | मूल C निष्पादन चरित्र चयन में बेल चरित्र, [[Backspace]] और [[कैरिज रिटर्न|कैरिज वापसी]] के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। चलाने का समय प्रोग्राम जीवनचक्र चरण | C स्टैंडर्ड के प्रत्येक संशोधन के साथ विस्तारित वर्ण चयन के लिए क्रम समर्थन बढ़ गया है। | ||
=== आरक्षित शब्द === | === आरक्षित शब्द === | ||
C 89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अतिरिक्त किसी अन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं: | C 89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अतिरिक्त किसी अन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं: | ||
{{div col|colwidth=13em}}* < | {{div col|colwidth=13em}}* <code>auto</code> | ||
* < | * <code>[[break statement|break]]</code> | ||
* < | * <code>case</code> | ||
* < | * <code>four</code> | ||
* < | * <code> [[const (computer programming) | const]] | ||
* < | * <code>[[continue(keyword)|continue]]</code> | ||
* < | * <code>default</code> | ||
* < | * <code>do</code> | ||
* | * [[double precision | double]] | ||
* < | * <code>[[conditional (computer programming)|other]]</code> | ||
* < | * <code> [[enumerated type | enum]] | ||
* | * [[extern variable | outer]] | ||
* | * [[floating-point arithmetic | float]] | ||
* | * [[for loop | for]] | ||
* | * [[goto]] </code> | ||
* < | * <code>[[conditional (computer programming)|if]]</code> | ||
* <code>[[ | * <code>[[Integer (Computer Science)|int]]</code> | ||
* | * [[long int | long]] | ||
* < | * <code>[[register (C programming language)|register]]</code> | ||
* < | * <code>return</code> | ||
* | * [[short int | short]] | ||
* < | * <code>[[unsigned number representation|unsigned]]</code> | ||
* < | * <code> [[size]] </code> | ||
* < | * <code> [[static(keyword) | static]] | ||
* < | * <code> [[struct (C programming language) | struct]] | ||
* < | * <code>[[switch statement|switch]]</code> | ||
* <code>typedef</code> | * <code>typedef</code> | ||
* < | * <code>union</code> | ||
* | * [[ unsigned number representation | unsigned]] | ||
* | * [[void type | void]] | ||
* < | * <code>[[volatile variable|volatile]]</code> | ||
* | * [[while loop | while]]{{div col end}}<blockquote> | ||
C 99 ने पांच और शब्द आरक्षित किए: | C 99 ने पांच और शब्द आरक्षित किए: | ||
{{div col|colwidth=13em}}* < | {{div col|colwidth=13em}}* <code>_bool</code> | ||
* < | * <code> [[complex data type|_complex]]</code> | ||
* < | * <code>[[complex data type|_hypothetical]]</code> | ||
* < | * <code> [[inline function | inline]] | ||
* < | * <code> [[restrict]] </code>{{div col end}} | ||
C 11 ने सात और शब्द आरक्षित किए:<ref name="ISOIEC 9899">{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf|title=ISO/IEC 9899:201x (ISO C11) समिति मसौदा|access-date=September 16, 2011|archive-date=December 22, 2017|archive-url=https://web.archive.org/web/20171222215122/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf|url-status=live}}</ref> | C 11 ने सात और शब्द आरक्षित किए:<ref name="ISOIEC 9899">{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf|title=ISO/IEC 9899:201x (ISO C11) समिति मसौदा|access-date=September 16, 2011|archive-date=December 22, 2017|archive-url=https://web.archive.org/web/20171222215122/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf|url-status=live}}</ref> | ||
{{div col|colwidth=13em}}* < | {{div col|colwidth=13em}}* <code>_Alignas</code> | ||
* < | * <code>_Alignof</code> | ||
* < | * <code>_atom</code> | ||
* < | * <code>_normal</code> | ||
* < | * <code>_no return</code> | ||
* | * _static_assert | ||
* < | * <code>_caste_local</code>{{div col end}} | ||
जल्दी में आरक्षित अधिकांश शब्द अंडरस्कोर( _ ) के साथ प्रारंभ होते हैं, जिसके बाद बड़ा अक्षर होता है, क्योंकि उस फॉर्म के पहचानकर्ता पहले C मानक द्वारा केवल कार्यान्वयन के उपयोग के लिए आरक्षित थे। चूंकि उपस्तिथा प्रोग्राम स्रोत संकेत को इन पहचानकर्ताओं का उपयोग नहीं करना चाहिए था, यह तब प्रभावित नहीं होगा जब C कार्यान्वयन प्रोग्रामिंग भाषा में इनका समर्थन करना प्रारंभ कर दें। कुछ मानक शीर्षलेख अंडरस्कोर किए गए पहचानकर्ताओं के लिए अधिक सुविधाजनक समानार्थक शब्द परिभाषित करते हैं। भाषा में पहले आरक्षित शब्द सम्मलित था जिसे कहा जाता था <code>entry</code>, किन्तुयह संभवतः ही कभी लागू किया गया था, और अब है आरक्षित शब्द के रूप में हटा दिया गया है।{{sfnp|Kernighan|Ritchie|1988|pp=192, 259}} | |||
=== ऑपरेटर === | === ऑपरेटर === | ||
{{Main| | {{Main|C और C++ में आपरेटर का उपयोग}} | ||
C [[ऑपरेटर (कंप्यूटर प्रोग्रामिंग)]] के समृद्ध चयन का समर्थन करता है, जो उस अभिव्यक्ति का मूल्यांकन करते समय किए जाने वाले कार्यसाधन को निर्दिष्ट करने के लिए [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] के भीतर उपयोग किए जाने वाले प्रतीक हैं। C के लिए ऑपरेटर हैं: | C [[ऑपरेटर (कंप्यूटर प्रोग्रामिंग)]] के समृद्ध चयन का समर्थन करता है, जो उस अभिव्यक्ति का मूल्यांकन करते समय किए जाने वाले कार्यसाधन को निर्दिष्ट करने के लिए [[अभिव्यक्ति (कंप्यूटर विज्ञान)]] के भीतर उपयोग किए जाने वाले प्रतीक हैं। C के लिए ऑपरेटर हैं: | ||
*[[अंकगणित]]: जोड़|<code>+</code>, घटाव |<code>-</code>, गुणन |<code>*</code>, विभाजन (गणित)|<code>/</code>, मोडुलो ऑपरेशन |<code>%</code>* कार्यभार (कंप्यूटर विज्ञान): <code>=</code> | *[[अंकगणित]]: जोड़|<code>+</code>, घटाव |<code>-</code>, गुणन |<code>*</code>, विभाजन (गणित)|<code>/</code>, मोडुलो ऑपरेशन |<code>%</code>* कार्यभार (कंप्यूटर विज्ञान): <code>=</code> | ||
* [[संवर्धित असाइनमेंट|संवर्धित कार्यभार]]: | * [[संवर्धित असाइनमेंट|संवर्धित कार्यभार]]: | ||
* [[बिटवाइज़ ऑपरेशन]]: <code>~</code>, <code>&</code>, <code>|</code>, <code>^</code> | * [[बिटवाइज़ ऑपरेशन]]: <code>~</code>, <code>&</code>, <code>|</code>, <code>^</code> | ||
* [[बिट शिफ्ट|अंश शिफ्ट]]: <code><<</code>, <code>>></code> | * [[बिट शिफ्ट|अंश शिफ्ट]]: <code><<</code>, <code>>></code> | ||
* [[बूलियन बीजगणित]]: <code>!</code>, <code>&&</code>, <code>||</code> | * [[बूलियन बीजगणित]]: <code>!</code>, <code>&&</code>, <code>||</code> | ||
* ?:: ?:|<code>? :</code>* समानता परीक्षण: समानता (गणित) |<code>==</code>, असमानता (गणित)|<code>!=</code>* उप-दैनिकि: <code>( )</code> | * ?:: ?:|<code>? :</code>* समानता परीक्षण: समानता (गणित) |<code>==</code>, असमानता (गणित)|<code>!=</code>* उप-दैनिकि: <code>( )</code> | ||
* वृद्धि और कमी ऑपरेटर: <code>++</code>, <code>--</code> | * वृद्धि और कमी ऑपरेटर: <code>++</code>, <code>--</code> | ||
* [[रिकॉर्ड (कंप्यूटर विज्ञान)|अभिलेख (कंप्यूटर विज्ञान)]]: <code>.</code>, <code>-></code> | * [[रिकॉर्ड (कंप्यूटर विज्ञान)|अभिलेख (कंप्यूटर विज्ञान)]]: <code>.</code>, <code>-></code> | ||
Line 311: | Line 311: | ||
== डेटा प्रकार == | == डेटा प्रकार == | ||
{{Main|C चर प्रकार और घोषणाएँ}}[[File:1999 ISO C Concepts.png|thumb]]'''C''' में प्ररूप प्रणाली स्थिर प्ररूप और कमजोर प्ररूप है, जो इसे [[पास्कल (प्रोग्रामिंग भाषा)]] जैसे ऐल्गॉल वंशजों के प्ररूप प्रणाली के समान बनाता है।<ref name="Nmlwr">{{cite journal | title=प्रोग्रामिंग लैंग्वेज सी और पास्कल की तुलना| journal=ACM Computing Surveys | volume=14 | issue=1 | pages=73–92 | doi=10.1145/356869.356872 | first1=Alan R. | last1=Feuer | first2=Narain H. | last2=Gehani | date=March 1982| s2cid=3136859}}</ref> विभिन्न आकारों के पूर्णांकों के लिए अंतर्निहित प्रकार हैं, दोनों हस्ताक्षरित और अहस्ताक्षरित [[चल बिन्दु संख्या]] संख्याएँ, और प्रगणित प्रकार (<code>enum</code>). पूर्णांक प्रकार <code>Char</code> अधिकांशतः एकल-बाइट वर्णों के लिए प्रयोग किया जाता है। C 99 ने [[बूलियन डेटाटाइप|बूलियन डेटाप्ररूप]] जोड़ा। सरणी डेटा प्रकार, सूचक(कंप्यूटर प्रोग्रामिंग), अभिलेख (कंप्यूटर विज्ञान) सहित व्युत्पन्न प्रकार भी हैं (<code>[[Struct (C programming language)|struct]]</code>), और संघ (कंप्यूटर विज्ञान) (<code>union</code>). | {{Main|C चर प्रकार और घोषणाएँ}}[[File:1999 ISO C Concepts.png|thumb]]'''C''' में प्ररूप प्रणाली स्थिर प्ररूप और कमजोर प्ररूप है, जो इसे [[पास्कल (प्रोग्रामिंग भाषा)]] जैसे ऐल्गॉल वंशजों के प्ररूप प्रणाली के समान बनाता है।<ref name="Nmlwr">{{cite journal | title=प्रोग्रामिंग लैंग्वेज सी और पास्कल की तुलना| journal=ACM Computing Surveys | volume=14 | issue=1 | pages=73–92 | doi=10.1145/356869.356872 | first1=Alan R. | last1=Feuer | first2=Narain H. | last2=Gehani | date=March 1982| s2cid=3136859}}</ref> विभिन्न आकारों के पूर्णांकों के लिए अंतर्निहित प्रकार हैं, दोनों हस्ताक्षरित और अहस्ताक्षरित [[चल बिन्दु संख्या]] संख्याएँ, और प्रगणित प्रकार (<code>enum</code>). पूर्णांक प्रकार <code>Char</code> अधिकांशतः एकल-बाइट वर्णों के लिए प्रयोग किया जाता है। C 99 ने [[बूलियन डेटाटाइप|बूलियन डेटाप्ररूप]] जोड़ा। सरणी डेटा प्रकार, सूचक(कंप्यूटर प्रोग्रामिंग), अभिलेख (कंप्यूटर विज्ञान) सहित व्युत्पन्न प्रकार भी हैं (<code>[[Struct (C programming language)|struct]]</code>), और संघ (कंप्यूटर विज्ञान) (<code>union</code>). | ||
C का उपयोग अधिकांशतः निम्न-स्तरीय प्रणाली प्रोग्रामिंग में किया जाता है, जहाँ प्ररूप प्रणाली से बचना आवश्यक हो सकता है। संकलक अधिकांश प्रकार की शुद्धता सुनिश्चित करने का प्रयास करता है, किन्तु प्रोग्रामर विभिन्न तरीकों से चेक को अवहेलना कर सकता है, तो दूसरे प्रकार से मूल्य को स्पष्ट रूप से रूपांतरित करने के लिए सूचक या यूनियनों का उपयोग करके अंतर्निहित बिट्स की पुनर्व्याख्या करने के लिए डेटा प्रयोजन का किसी अन्य विधि से हैं। | C का उपयोग अधिकांशतः निम्न-स्तरीय प्रणाली प्रोग्रामिंग में किया जाता है, जहाँ प्ररूप प्रणाली से बचना आवश्यक हो सकता है। संकलक अधिकांश प्रकार की शुद्धता सुनिश्चित करने का प्रयास करता है, किन्तु प्रोग्रामर विभिन्न तरीकों से चेक को अवहेलना कर सकता है, तो दूसरे प्रकार से मूल्य को स्पष्ट रूप से रूपांतरित करने के लिए सूचक या यूनियनों का उपयोग करके अंतर्निहित बिट्स की पुनर्व्याख्या करने के लिए डेटा प्रयोजन का किसी अन्य विधि से हैं। | ||
कुछ लोगC के घोषणा वाक्य-विन्यास को विशेष रूप से [[समारोह सूचक|फंक्शन सूचक]] के लिए अनपेक्षित पाते हैं। रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था , [[घोषणा उपयोग को दर्शाती है]]।{{sfnp|Kernighan|Ritchie|1988|p=122}} C के सामान्य अंकगणितीय रूपांतरण कुशल | कुछ लोगC के घोषणा वाक्य-विन्यास को विशेष रूप से [[समारोह सूचक|फंक्शन सूचक]] के लिए अनपेक्षित पाते हैं। रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था , [[घोषणा उपयोग को दर्शाती है]]।{{sfnp|Kernighan|Ritchie|1988|p=122}} C के सामान्य अंकगणितीय रूपांतरण कुशल संकेत उत्पन्न करने की अनुमति देते हैं, किन्तु कभी-कभी अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए, समान चौड़ाई के हस्ताक्षरित और अहस्ताक्षरित पूर्णांकों की तुलना के लिए हस्ताक्षरित मान को अहस्ताक्षरित में बदलने की आवश्यकता होती है। यदि हस्ताक्षरित मान ऋणात्मक है तो यह अनपेक्षित परिणाम उत्पन्न कर सकता है। | ||
=== सूचक === | === सूचक === | ||
Line 355: | Line 339: | ||
C में कई उद्देश्यों के लिए सूचक का उपयोग किया जाता है। स्ट्रिंग कंप्यूटर विज्ञान को सामान्यतः वर्णों के सरणी यों में सूचक का उपयोग करके कार्य साधन किया जाता है। गतिशील मेमोरी आवंटन सूचक का उपयोग करके किया जाता है A का परिणाम <code>malloc</code> सामान्यतः संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे [[पेड़ (डेटा संरचना)]], सामान्यतः गतिशील रूप से आवंटित किए जाते हैं <code>struct</code> सूचक का उपयोग करके साथ जुड़ी हुई वस्तुएं। सूचक अन्य सूचक का उपयोग अधिकांशतः बहु-आयामी सरणी यों और सरणी यों में किया जाता है <code>struct</code> वस्तुओं। फ़ंक्शन के सूचक (फ़ंक्शन सूचक ) [[प्रेषण तालिका]] में उच्च-क्रम फ़ंक्शन (जैसे [[qsort|क्यूसॉर्ट]] या [[bsearch|Bखोज]] ) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या [[कॉलबैक (कंप्यूटर विज्ञान)]] के रूप में Event_(C omputing)#Event_handler ।<ref name="bk21st" /> | C में कई उद्देश्यों के लिए सूचक का उपयोग किया जाता है। स्ट्रिंग कंप्यूटर विज्ञान को सामान्यतः वर्णों के सरणी यों में सूचक का उपयोग करके कार्य साधन किया जाता है। गतिशील मेमोरी आवंटन सूचक का उपयोग करके किया जाता है A का परिणाम <code>malloc</code> सामान्यतः संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे [[पेड़ (डेटा संरचना)]], सामान्यतः गतिशील रूप से आवंटित किए जाते हैं <code>struct</code> सूचक का उपयोग करके साथ जुड़ी हुई वस्तुएं। सूचक अन्य सूचक का उपयोग अधिकांशतः बहु-आयामी सरणी यों और सरणी यों में किया जाता है <code>struct</code> वस्तुओं। फ़ंक्शन के सूचक (फ़ंक्शन सूचक ) [[प्रेषण तालिका]] में उच्च-क्रम फ़ंक्शन (जैसे [[qsort|क्यूसॉर्ट]] या [[bsearch|Bखोज]] ) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या [[कॉलबैक (कंप्यूटर विज्ञान)]] के रूप में Event_(C omputing)#Event_handler ।<ref name="bk21st" /> | ||
शून्य सूचक मान स्पष्ट रूप से किसी मान्य स्थान की ओर संकेत नहीं करता है। अशक्त सूचक मान को अपरिभाषित करना अपरिभाषित है, जिसके परिणामस्वरूप अधिकांशतः विभाजन दोष होता है। अशक्त सूचक मान विशेष स्थितियोंको इंगित करने के लिए उपयोगी होते हैं जैसे कि संपर्क की गई सूची के अंतिम नोड में कोई अगला सूचक नहीं है, फ़ंक्शन वापसी सूचक से त्रुटि संकेत के रूप में। स्रोत | शून्य सूचक मान स्पष्ट रूप से किसी मान्य स्थान की ओर संकेत नहीं करता है। अशक्त सूचक मान को अपरिभाषित करना अपरिभाषित है, जिसके परिणामस्वरूप अधिकांशतः विभाजन दोष होता है। अशक्त सूचक मान विशेष स्थितियोंको इंगित करने के लिए उपयोगी होते हैं जैसे कि संपर्क की गई सूची के अंतिम नोड में कोई अगला सूचक नहीं है, फ़ंक्शन वापसी सूचक से त्रुटि संकेत के रूप में। स्रोत संकेत में उपयुक्त संदर्भों में, जैसे कि सूचक चर को निर्दिष्ट करने के लिए, शून्य सूचक स्थिरांक को इस रूप में लिखा जा सकता है <code>0</code>, के साथ या सूचक प्रकार के लिए स्पष्ट कास्टिंग के अतिरिक्त रूप में <code>NULL</code> कई मानक शीर्षलेखों द्वारा परिभाषित मैक्रो। प्रतिबंधात्मक संदर्भों में, अशक्त सूचक मान असत्य का मूल्यांकन करते हैं, चूँकि अन्य सभी सूचक मान सत्य का मूल्यांकन करते हैं। | ||
शून्य संकेतक (<code>void *</code>) अनिर्दिष्ट प्रकार की वस्तुओं को इंगित करता है और इसलिए सामान्य डेटा सूचक के रूप में उपयोग किया जा सकता है। चूँकि इंगित -प्रयोजन का आकार और प्रकार ज्ञात नहीं है, शून्य सूचक को भिन्नता नहीं किया जा सकता है, न ही उन पर सूचक अंकगणित की अनुमति है, चूँकि वे आसानी से और कई संदर्भों में निहित हैं किसी अन्य प्रयोजन सूचकसे परिवर्तित हो सकते हैं।<ref name="bk21st" /> | शून्य संकेतक (<code>void *</code>) अनिर्दिष्ट प्रकार की वस्तुओं को इंगित करता है और इसलिए सामान्य डेटा सूचक के रूप में उपयोग किया जा सकता है। चूँकि इंगित -प्रयोजन का आकार और प्रकार ज्ञात नहीं है, शून्य सूचक को भिन्नता नहीं किया जा सकता है, न ही उन पर सूचक अंकगणित की अनुमति है, चूँकि वे आसानी से और कई संदर्भों में निहित हैं किसी अन्य प्रयोजन सूचकसे परिवर्तित हो सकते हैं।<ref name="bk21st" /> | ||
Line 361: | Line 345: | ||
सूचक का लापरवाह उपयोग संभावित रूप से खतरनाक है। क्योंकि वे सामान्यतः अनियंत्रित होते हैं, किसी भी मनमाने स्थान को इंगित करने के लिए सूचक चर बनाया जा सकता है, जो अवांछनीय प्रभाव उत्पन्न कर सकता है। चूंकि उचित रूप से उपयोग किए गए सूचक सुरक्षित स्थानों की ओर संकेत करते हैं, उन्हें अमान्य सूचकअंकगणित का उपयोग करके असुरक्षित स्थानों की ओर संकेत किया जा सकता है वे जिन वस्तुओं की ओर संकेत करते हैं, वे विस्थापन (झूलने वाले संकेत) के बाद भी उपयोगी की जा सकती हैं उनका उपयोग आरंभ किए अतिरिक्त किया जा सकता है (वाइल्ड सूचक ) या उन्हें कास्ट, यूनियन, या किसी अन्य भ्रष्ट सूचक के माध्यम से सीधे असुरक्षित मान निर्धारण किया जा सकता है। सामान्यतः,C सूचक प्रकारों के बीच कार्यसाधन और रूपांतरण की अनुमति देने में अनुज्ञेय है, चूंकि संकलक सामान्यतः जाँच के विभिन्न स्तरों के लिए विकल्प प्रदान करते हैं। कुछ अन्य प्रोग्रामिंग भाषाएँ अधिक प्रतिबंधात्मक संदर्भ कंप्यूटर विज्ञान प्रकारों का उपयोग करके इन समस्याओं का समाधान करती हैं। | सूचक का लापरवाह उपयोग संभावित रूप से खतरनाक है। क्योंकि वे सामान्यतः अनियंत्रित होते हैं, किसी भी मनमाने स्थान को इंगित करने के लिए सूचक चर बनाया जा सकता है, जो अवांछनीय प्रभाव उत्पन्न कर सकता है। चूंकि उचित रूप से उपयोग किए गए सूचक सुरक्षित स्थानों की ओर संकेत करते हैं, उन्हें अमान्य सूचकअंकगणित का उपयोग करके असुरक्षित स्थानों की ओर संकेत किया जा सकता है वे जिन वस्तुओं की ओर संकेत करते हैं, वे विस्थापन (झूलने वाले संकेत) के बाद भी उपयोगी की जा सकती हैं उनका उपयोग आरंभ किए अतिरिक्त किया जा सकता है (वाइल्ड सूचक ) या उन्हें कास्ट, यूनियन, या किसी अन्य भ्रष्ट सूचक के माध्यम से सीधे असुरक्षित मान निर्धारण किया जा सकता है। सामान्यतः,C सूचक प्रकारों के बीच कार्यसाधन और रूपांतरण की अनुमति देने में अनुज्ञेय है, चूंकि संकलक सामान्यतः जाँच के विभिन्न स्तरों के लिए विकल्प प्रदान करते हैं। कुछ अन्य प्रोग्रामिंग भाषाएँ अधिक प्रतिबंधात्मक संदर्भ कंप्यूटर विज्ञान प्रकारों का उपयोग करके इन समस्याओं का समाधान करती हैं। | ||
=== | === सरणीयाँ === | ||
{{See also|C स्ट्रिंग}} | {{See also|C स्ट्रिंग}} | ||
Line 371: | Line 355: | ||
आधुनिक C 99 बाद में का उपयोग करने वाला निम्न उदाहरण संचय पर द्वि-आयामी सरणी का आवंटन और अभिगम के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है जो कई C संकलनकर्ता पर सीमा-जांच का उपयोग कर सकता है। <वाक्यविन्यास प्रकाश लैंग = सी>इंट फंक (इंट एन, इंट एम){ | आधुनिक C 99 बाद में का उपयोग करने वाला निम्न उदाहरण संचय पर द्वि-आयामी सरणी का आवंटन और अभिगम के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है जो कई C संकलनकर्ता पर सीमा-जांच का उपयोग कर सकता है। <वाक्यविन्यास प्रकाश लैंग = सी>इंट फंक (इंट एन, इंट एम){ | ||
int func(int N, int M) | |||
{ | |||
float (*p)[N][M] = malloc(sizeof *p); | |||
if (!p) | |||
return -1; | |||
for (int i = 0; i < N; i++) | |||
for (int j = 0; j < M; j++) | |||
(*p)[i][j] = i + j; | |||
print_array(N, M, p); | |||
free(p); | |||
return 1; | |||
} | } | ||
और यहाँ C 99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है।<वाक्यविन्यास प्रकाश लैंग = सी> | और यहाँ C 99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है।<वाक्यविन्यास प्रकाश लैंग = सी> | ||
इंट फंक (इंट एन, इंट एम){ | इंट फंक (इंट एन, इंट एम){ | ||
int func(int N, int M) | |||
{ | |||
// Caution: checks should be made to ensure N*M*sizeof(float) does NOT exceed limitations for auto VLAs and is within available size of stack. | |||
float p[N][M]; // auto VLA is held on the stack, and sized when the function is invoked | |||
for (int i = 0; i < N; i++) | |||
for (int j = 0; j < M; j++) | |||
} | p[i][j] = i + j; | ||
// no need to free(p) since it will disappear when the function exits, along with the rest of the stack frame | |||
return 1; | |||
} | |||
=== सरणी -सूचक विनिमेयता === | === सरणी -सूचक विनिमेयता === | ||
सबस्क्रिप्ट अंकन <code>x[i]</code> (कहाँ पे <code>x</code> सूचक को नामित करता है) के लिए [[सिंटैक्टिक चीनी]] है <code>*(x+i)</code>.<ref name="Raymond1996">{{cite book |last1=Raymond |first1=Eric S. |author-link=Eric S. Raymond |title=द न्यू हैकर डिक्शनरी|edition=3rd |url=https://books.google.com/books?id=g80P_4v4QbIC&pg=PA432 |access-date=August 5, 2012 |date=October 11, 1996 |publisher=MIT Press |isbn=978-0-262-68092-9 |page=432 |archive-date=November 12, 2012 |archive-url=https://web.archive.org/web/20121112211257/http://books.google.com/books?id=g80P_4v4QbIC&pg=PA432 |url-status=live }}</ref> सूचक प्रकार के संकलक के ज्ञान का लाभ उठाते हुए, वह पता <code>x + i</code> आधार की ओर पता नहीं है। <code>x</code>द्वारा इंगित किया गया है बढ़ाया गया <code>i</code> बाइट्स, जबकि इसके द्वारा बढ़ाए गए आधार पते के रूप में परिभाषित किया गया है <code>i</code> तत्व के आकार से गुणा करें <code>x</code> संकेत करना। इस प्रकार, <code>x[i]</code> निर्दिष्ट करता है <code>i+1</code>सरणी का वें तत्व है। | सबस्क्रिप्ट अंकन <code>x[i]</code> (कहाँ पे <code>x</code> सूचक को नामित करता है) के लिए [[सिंटैक्टिक चीनी]] है <code>*(x+i)</code>.<ref name="Raymond1996">{{cite book |last1=Raymond |first1=Eric S. |author-link=Eric S. Raymond |title=द न्यू हैकर डिक्शनरी|edition=3rd |url=https://books.google.com/books?id=g80P_4v4QbIC&pg=PA432 |access-date=August 5, 2012 |date=October 11, 1996 |publisher=MIT Press |isbn=978-0-262-68092-9 |page=432 |archive-date=November 12, 2012 |archive-url=https://web.archive.org/web/20121112211257/http://books.google.com/books?id=g80P_4v4QbIC&pg=PA432 |url-status=live }}</ref> सूचक प्रकार के संकलक के ज्ञान का लाभ उठाते हुए, वह पता <code>x + i</code> आधार की ओर पता नहीं है। <code>x</code>द्वारा इंगित किया गया है बढ़ाया गया <code>i</code> बाइट्स, जबकि इसके द्वारा बढ़ाए गए आधार पते के रूप में परिभाषित किया गया है <code>i</code> तत्व के आकार से गुणा करें <code>x</code> संकेत करना। इस प्रकार, <code>x[i]</code> निर्दिष्ट करता है <code>i+1</code>सरणी का वें तत्व है। | ||
इसके अतिरिक्त, अधिकांश अभिव्यक्ति संदर्भों में उल्लेखनीय अपवाद के संकार्य के रूप में है <code>[[sizeof]]</code>, सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किसी फ़ंक्शन के तर्क के रूप में नामित होने पर किसी सरणी को पूरी प्रकार से प्रतिलिपि नहीं किया जाता है, जबकि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, किसी फ़ंक्शन में [[कॉल-टू-मूल्य से]] | पास-बाय-मूल्यशब्दार्थ का उपयोग करते हैं, सरणीयाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं। | इसके अतिरिक्त, अधिकांश अभिव्यक्ति संदर्भों में उल्लेखनीय अपवाद के संकार्य के रूप में है <code>[[sizeof]]</code>, सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किसी फ़ंक्शन के तर्क के रूप में नामित होने पर किसी सरणी को पूरी प्रकार से प्रतिलिपि नहीं किया जाता है, जबकि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, किसी फ़ंक्शन में [[कॉल-टू-मूल्य से]] | पास-बाय-मूल्यशब्दार्थ का उपयोग करते हैं, सरणीयाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं। | ||
सरणी का कुल आकार <code>x</code> आवेदन करके निर्धारित किया जा सकता है <code>sizeof</code> सरणी प्रकार की अभिव्यक्ति के लिए। ऑपरेटर को लागू करके किसी तत्व का आकार निर्धारित किया जा सकता है <code>sizeof</code> किसी सरणी के किसी भी संदर्भित तत्व के लिए <code>A</code>, जैसे की <code>n = sizeof A[0]</code>. इस प्रकार, घोषित सरणी में तत्वों की संख्या <code>A</code> के रूप में निर्धारित किया जा सकता है <code>sizeof A / sizeof A[0]</code>. ध्यान दें, यदि केवल पहले तत्व के लिए संकेतक उपलब्ध है जैसा कि अधिकांशतःC | सरणी का कुल आकार <code>x</code> आवेदन करके निर्धारित किया जा सकता है <code>sizeof</code> सरणी प्रकार की अभिव्यक्ति के लिए। ऑपरेटर को लागू करके किसी तत्व का आकार निर्धारित किया जा सकता है <code>sizeof</code> किसी सरणी के किसी भी संदर्भित तत्व के लिए <code>A</code>, जैसे की <code>n = sizeof A[0]</code>. इस प्रकार, घोषित सरणी में तत्वों की संख्या <code>A</code> के रूप में निर्धारित किया जा सकता है <code>sizeof A / sizeof A[0]</code>. ध्यान दें, यदि केवल पहले तत्व के लिए संकेतक उपलब्ध है जैसा कि अधिकांशतःC संकेत में होता है क्योंकि ऊपर वर्णित स्वचालित रूपांतरण के कारण, सरणी के पूर्ण प्रकार और इसकी लंबाई के बारे में जानकारी खो जाती है। | ||
== स्मृति प्रबंधन == | == स्मृति प्रबंधन == | ||
Line 411: | Line 401: | ||
जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, स्थिर वस्तुओं में प्रोग्राम प्रचलित होना पर शून्य सूचक मान होते हैं। स्वचालित रूप से और गतिशील रूप से आवंटित वस्तुओं को केवल तभी प्रारंभ किया जाता है जब प्रारंभिक मान स्पष्ट रूप से निर्दिष्ट किया गया हो अन्यथा उनके प्रारंभ में अनिश्चित मान होते हैं सामान्यतः, जो कुछ भी होता है वह [[कंप्यूटर भंडारण]] में उपस्तिथ होता है, जो उस प्रकार के लिए मान्य मान का प्रतिनिधित्व भी नहीं कर सकता है। यदि प्रोग्राम अ-प्रारंभिक मान तक पहुँचने का प्रयास करता है, तो परिणाम अपरिभाषित होते हैं। कई आधुनिक संकलक इस समस्या का पता लगाने और इसके बारे में चेतावनी देने का प्रयास करते हैं, किन्तु प्ररूप और प्ररूप दोनों त्रुटियाँ हो सकती हैं। | जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, स्थिर वस्तुओं में प्रोग्राम प्रचलित होना पर शून्य सूचक मान होते हैं। स्वचालित रूप से और गतिशील रूप से आवंटित वस्तुओं को केवल तभी प्रारंभ किया जाता है जब प्रारंभिक मान स्पष्ट रूप से निर्दिष्ट किया गया हो अन्यथा उनके प्रारंभ में अनिश्चित मान होते हैं सामान्यतः, जो कुछ भी होता है वह [[कंप्यूटर भंडारण]] में उपस्तिथ होता है, जो उस प्रकार के लिए मान्य मान का प्रतिनिधित्व भी नहीं कर सकता है। यदि प्रोग्राम अ-प्रारंभिक मान तक पहुँचने का प्रयास करता है, तो परिणाम अपरिभाषित होते हैं। कई आधुनिक संकलक इस समस्या का पता लगाने और इसके बारे में चेतावनी देने का प्रयास करते हैं, किन्तु प्ररूप और प्ररूप दोनों त्रुटियाँ हो सकती हैं। | ||
जितना संभव हो उतना पुन: उपयोग करने के लिए संचय मेमोरी आवंटन को किसी भी प्रोग्राम में इसके वास्तविक उपयोग के साथ सिंक्रनाइज़ करना होगा। उदाहरण के लिए, यदि ढेर मेमोरी आवंटन के लिए मात्र सूचक सीमा से बाहर हो जाता है। इसके मूल्य को स्पष्ट रूप से हटाए जाने से पहले अधिलेखित कर दिया जाता है, तो उस [[स्मृति रिसाव]] बाद में पुन: उपयोग के लिए पुनर्प्राप्त नहीं किया जा सकता है और अनिवार्य रूप से कार्यक्रम में खो जाता है। घटना जिसे स्मृति के रूप में जाना जाता है रिसना। इसके विपरीत, स्मृति को मुक्त करना संभव है, किन्तु बाद में संदर्भित किया जाता है, जिससे अप्रत्याशित परिणाम सामने आते हैं। सामान्यतः, विफलता के लक्षण प्रोग्राम के उस भाग में दिखाई देते हैं जो उस | जितना संभव हो उतना पुन: उपयोग करने के लिए संचय मेमोरी आवंटन को किसी भी प्रोग्राम में इसके वास्तविक उपयोग के साथ सिंक्रनाइज़ करना होगा। उदाहरण के लिए, यदि ढेर मेमोरी आवंटन के लिए मात्र सूचक सीमा से बाहर हो जाता है। इसके मूल्य को स्पष्ट रूप से हटाए जाने से पहले अधिलेखित कर दिया जाता है, तो उस [[स्मृति रिसाव]] बाद में पुन: उपयोग के लिए पुनर्प्राप्त नहीं किया जा सकता है और अनिवार्य रूप से कार्यक्रम में खो जाता है। घटना जिसे स्मृति के रूप में जाना जाता है रिसना। इसके विपरीत, स्मृति को मुक्त करना संभव है, किन्तु बाद में संदर्भित किया जाता है, जिससे अप्रत्याशित परिणाम सामने आते हैं। सामान्यतः, विफलता के लक्षण प्रोग्राम के उस भाग में दिखाई देते हैं जो उस संकेत से संबंधित नहीं है जो त्रुटि का कारण बनता है, जिससे विफलता का निदान करना जटिल हो जाता है। कचरा संग्रह कंप्यूटर विज्ञान के साथ भाषाओं में इस प्रकार के मुद्दों में सुधार हुआ है। | ||
== पुस्तकालय == | == पुस्तकालय == | ||
सी प्रोग्रामिंग भाषा पुस्तकालय कंप्यूटिंग को अपने विस्तार के प्राथमिक विधि के रूप में उपयोग करती है। C में, पुस्तकालय संग्रह फ़ाइल में निहित कार्यों का चयन है। प्रत्येक पुस्तकालय में सामान्यतः [[हेडर फाइल|प्रवेशिका फाइल]] होती है, जिसमें पुस्तकालय के भीतर निहित फ़ंक्शन के प्रोटोप्ररूप होते हैं, जिनका उपयोग प्रोग्राम द्वारा किया जा सकता है, और इन फ़ंक्शन के साथ उपयोग किए जाने वाले विशेष डेटा प्रकारों और मैक्रो प्रतीकों की घोषणा करती है। पुस्तकालय का उपयोग करने के लिए प्रोग्राम के लिए, इसमें पुस्तकालय की प्रवेशिका फ़ाइल सम्मलित होनी चाहिए, और पुस्तकालय को प्रोग्राम से जोड़ा जाना चाहिए। जिसके लिए कई स्थितियों में [[संकलक ध्वज]] की आवश्यकता होती है उदाहरण के लिए, <code>-lm</code>, गणित पुस्तकालय को संपर्क करने के लिए आशुलिपि।<ref name="bk21st" /> | |||
सबसे साधारण C मानक पुस्तकालय है, जो [[आईएसओ मानक|ISO मानक]] और ANSIC मानकों द्वारा निर्दिष्ट है और प्रत्येकC कार्यान्वयन के साथ आता है। कार्यान्वयन जो सीमित वातावरण जैसे कि [[अंतः स्थापित प्रणालियाँ]] को लक्षित करता है। मानक पुस्तकालय का केवल सबचयन प्रदान कर सकता है। यह पुस्तकालय प्रवाह इनपुट और आउटपुट, मेमोरी एलोकेशन, मैथमैटिक्स, कैरेक्टर स्ट्रिंग्स और समय मूल्य को समर्थन करती है। कई अलग-अलग मानक शीर्षलेख उदाहरण के लिए, <code>stdio.h</code>) इन और अन्य मानक पुस्तकालय सुविधाओं के लिए इंटरफेस निर्दिष्ट करें। | सबसे साधारण C मानक पुस्तकालय है, जो [[आईएसओ मानक|ISO मानक]] और ANSIC मानकों द्वारा निर्दिष्ट है और प्रत्येकC कार्यान्वयन के साथ आता है। कार्यान्वयन जो सीमित वातावरण जैसे कि [[अंतः स्थापित प्रणालियाँ]] को लक्षित करता है। मानक पुस्तकालय का केवल सबचयन प्रदान कर सकता है। यह पुस्तकालय प्रवाह इनपुट और आउटपुट, मेमोरी एलोकेशन, मैथमैटिक्स, कैरेक्टर स्ट्रिंग्स और समय मूल्य को समर्थन करती है। कई अलग-अलग मानक शीर्षलेख उदाहरण के लिए, <code>stdio.h</code>) इन और अन्य मानक पुस्तकालय सुविधाओं के लिए इंटरफेस निर्दिष्ट करें। | ||
Line 420: | Line 410: | ||
C पुस्तकालय फ़ंक्शन का अन्य सामान्य चयन वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैसी प्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल संचालन प्रणाली को अंतराफलक प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और UNIX विशिष्टता में विस्तृत हैं। | C पुस्तकालय फ़ंक्शन का अन्य सामान्य चयन वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैसी प्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल संचालन प्रणाली को अंतराफलक प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और UNIX विशिष्टता में विस्तृत हैं। | ||
चूँकि, किसी में कई कार्यक्रम लिखे गए हैं, इसलिए कई प्रकार के अन्य पुस्तकालय उपलब्ध हैं। पुस्तकालय अधिकांशतः C में लिखे जाते हैं क्यों किसी संकलक कुशल [[वस्तु कोड]] उत्पन्न करते हैं प्रोग्रामर तब पुस्तकालय के लिए इंटरफेस बनाते हैं जिससे कि सामान्य उपयोग जावा प्रोग्रामिंग भाषा, मैक्तिक और पायथन प्रोग्रामिंग भाषा जैसी उच्च-स्तरीय भाषाओं से किया जा सके।<ref name="bk21st" /> | चूँकि, किसी में कई कार्यक्रम लिखे गए हैं, इसलिए कई प्रकार के अन्य पुस्तकालय उपलब्ध हैं। पुस्तकालय अधिकांशतः C में लिखे जाते हैं क्यों किसी संकलक कुशल [[वस्तु कोड|वस्तु]] संकेत उत्पन्न करते हैं प्रोग्रामर तब पुस्तकालय के लिए इंटरफेस बनाते हैं जिससे कि सामान्य उपयोग जावा प्रोग्रामिंग भाषा, मैक्तिक और पायथन प्रोग्रामिंग भाषा जैसी उच्च-स्तरीय भाषाओं से किया जा सके।<ref name="bk21st" /> | ||
=== फाइल संचालन और प्रवाह === | === फाइल संचालन और प्रवाह === | ||
फ़ाइल इनपुट और आउटपुट (I/O) स्वयं | फ़ाइल इनपुट और आउटपुट (I/O) स्वयं सी भाषा का भाग नहीं है, जबकि इसके अतिरिक्त पुस्तकालयों जैसे C मानक पुस्तकालय और उनसे जुड़ी प्रवेशिका फाइलें (उदाहरण। <code>stdio.h</code>). फ़ाइल संचालन सामान्यतः उच्च-स्तरीय I/O के माध्यम से कार्यान्वित की जाती है जो [[स्ट्रीम (कंप्यूटिंग)|प्रवाह (कंप्यूटिंग)]] के माध्यम से कार्य करती है। धारा इस दृष्टिकोण से डेटा प्रवाह है जो उपकरणों से स्वतंत्र है, चूँकि फ़ाइल ठोस उपकरण है। उच्च-स्तरीय I/O प्रवाह को फ़ाइल से जोड़कर किया जाता है। C मानक पुस्तकालय में, [[डेटा बफर|डेटा अंतर्रोधी]] स्मृति क्षेत्र अस्थायी रूप से डेटा को अंतिम गंतव्य पर भेजे जाने से पहले संग्रहीत करने के लिए उपयोग किया जाता है। यह धीमे उपकरणों के लिए प्रतीक्षा करने में लगने वाले समय को कम करता है, उदाहरण के लिए [[हार्ड ड्राइव]] या [[ठोस राज्य ड्राइव]] निम्न-स्तरीय I/O फ़ंक्शन मानकC पुस्तकालय का भाग नहीं हैं किन्तु सामान्यतः नंगे धातु प्रोग्रामिंग का भाग होते हैं। प्रोग्रामिंग जो किसी भी संचालन प्रणाली से स्वतंत्र होती है जैसे अधिकांश [[एम्बेडेड प्रोग्रामिंग|अंतर्निहित प्रोग्रामिंग]]) कुछ अपवादों के साथ, कार्यान्वयन में निम्न-स्तरीय I/O सम्मलित हैं। | ||
== भाषा उपकरण == | == भाषा उपकरण == | ||
C प्रोग्रामरों को अपरिभाषित व्यवहार या संभवतः गलत अभिव्यक्तियों के साथ संकलक द्वारा प्रदान की गई तुलना में अधिक कठोरता के साथ विवरणों को खोजने और ठीक करने में सहायता करने के लिए कई उपकरण विकसित किए गए हैं। | C प्रोग्रामरों को अपरिभाषित व्यवहार या संभवतः गलत अभिव्यक्तियों के साथ संकलक द्वारा प्रदान की गई तुलना में अधिक कठोरता के साथ विवरणों को खोजने और ठीक करने में सहायता करने के लिए कई उपकरण विकसित किए गए हैं। उपकरण [[लिंट (सॉफ्टवेयर)]] पहला ऐसा था, जो कई अन्य लोगों के लिए अग्रणी था। | ||
स्वचालित स्रोत | स्वचालित स्रोत संकेत जाँच और अंकेक्षण किसी भी भाषा में लाभदायक होते हैं, और C के लिए ऐसे कई उपकरण उपस्तिथ हैं, जैसे लिंट (सॉफ़्टवेयर)। जब कोई प्रोग्राम पहली बार लिखा जाता है तो संदिग्ध संकेत का पता लगाने के लिए लिंट का उपयोग करना सामान्य अभ्यास है। बार जब कोई प्रोग्राम लिंट पास कर लेता है, तो उसे C संकलक का उपयोग करके संकलित किया जाता है। इसके अतिरिक्त, कई संकलक वैकल्पिक रूप से वाक्यात्मक रूप से मान्य निर्माणों के बारे में चेतावनी दे सकते हैं जो वास्तव में त्रुटियां होने की संभावना है। [[MISRA C|MISRA]]C अंतर्निहित प्रणाली के लिए विकसित ऐसे संदिग्ध संकेत से बचने के लिए दिशानिर्देशों का मालिकाना चयन है।<ref name="MI2L0">{{cite web|url=http://www.unix.com/man-page/FreeBSD/1/lint |title=लिंट के लिए मैन पेज (फ्रीबीएसडी सेक्शन 1)|website=unix.com |date=May 24, 2001 |access-date=July 15, 2014}}</ref> ऐसी संचालन करने के लिए संकलक, पुस्तकालय और संचालन प्रणाली स्तर तंत्र भी हैं जो C का मानक भाग नहीं हैं, जैसे कि सरणीयों के लिए सीमा जाँच, अंतर्रोधी पूर आना का पता लगाना, क्रमांकन, मेमोरी प्रबंधन देखना और कचरा संग्रह कंप्यूटर विज्ञान। | ||
[[IBM Rational Purify|IBM तर्कसंगत शुद्धि]] या [[वेलग्रिंड]] जैसे उपकरण और [[malloc|Malloc]] के विशेष संस्करणों वाले पुस्तकालयों से संपर्क करने से मेमोरी उपयोग में क्रम त्रुटियों को अनावृत करने में सहायता मिल सकती है। | [[IBM Rational Purify|IBM तर्कसंगत शुद्धि]] या [[वेलग्रिंड]] जैसे उपकरण और [[malloc|Malloc]] के विशेष संस्करणों वाले पुस्तकालयों से संपर्क करने से मेमोरी उपयोग में क्रम त्रुटियों को अनावृत करने में सहायता मिल सकती है। | ||
Line 437: | Line 426: | ||
=== प्रणाली प्रोग्रामिंग में उपयोग के लिए तर्क === | === प्रणाली प्रोग्रामिंग में उपयोग के लिए तर्क === | ||
[[File:The C Programming Language.png|thumb| | [[File:The C Programming Language.png|thumb|सी प्रोग्रामिंग भाषा]]C संचालन प्रणाली और अंतर्निहित प्रणाली अनुप्रयोगों को लागू करने में [[सिस्टम प्रोग्रामिंग|प्रणाली प्रोग्रामिंग]] के लिए व्यापक रूप से उपयोग किया जाता है।<ref name="Zh3CW">{{Cite book|title=C++ के साथ प्रोग्रामिंग और समस्या समाधान|edition=6th |last1=Dale |first1=Nell B. |last2=Weems |first2=Chip |date=2014 |location=Burlington, MA |publisher=Jones & Bartlett Learning |isbn=978-1449694289 |oclc=894992484}}</ref> यह कई कारणों से है: | ||
* संकलन के बाद उत्पन्न | * संकलन के बाद उत्पन्न संकेत को कई क्रम प्रणाली की आवश्यकता नहीं होती है, और इसे कुछ बूट संकेत से सीधे विधि से लागू किया जा सकता है - इसे निष्पादित करना सरल है। | ||
* | * सी भाषा के विवरण और भाव सामान्यतः लक्ष्य प्रोसेसर के लिए निर्देशों के अनुक्रम पर अच्छी प्रकार से मैप होते हैं और इसके परिणामस्वरूप कम चलाने का समय प्रोग्राम जीवनचक्र चरण होता है। प्रणाली संसाधनों पर क्रम की मांग - यह निष्पादित करने के लिए तेज़ है। | ||
* ऑपरेटरों के अपने समृद्ध चयन के साथ, | * ऑपरेटरों के अपने समृद्ध चयन के साथ, सी भाषा लक्षित CPU की कई विशेषताओं का उपयोग कर सकती है। जहां विशेष CPU में अधिक गूढ़ निर्देश होते हैं, उन निर्देशों का लाभ उठाने के लिए संभवतः [[आंतरिक कार्य]] के साथ भाषा संस्करण का निर्माण किया जा सकता है - यह व्यावहारिक रूप से सभी लक्ष्य CPU की विशेषताओं का उपयोग कर सकता है। | ||
* भाषा बाइनरी डेटा के खंड पर संरचनाओं को उपरिशायी करना आसान बनाती है, जिससे डेटा को समझा जा सकता है। नेविगेट किया जा सकता है और संशोधित किया जा सकता है। - यह डेटा स्ट्रक्चर, यहां तक कि फाइल प्रणाली भी लिख सकता है। | * भाषा बाइनरी डेटा के खंड पर संरचनाओं को उपरिशायी करना आसान बनाती है, जिससे डेटा को समझा जा सकता है। नेविगेट किया जा सकता है और संशोधित किया जा सकता है। - यह डेटा स्ट्रक्चर, यहां तक कि फाइल प्रणाली भी लिख सकता है। | ||
* भाषा पूर्णांक अंकगणित और तर्क के लिए अंश कार्यसाधन सहित ऑपरेटरों के समृद्ध चयन का समर्थन करती है और संभवतः दशमलव संख्याएं के विभिन्न आकार - यह उचित रूप से संरचित डेटा को प्रभावी ढंग से संसाधित कर सकती है। | * भाषा पूर्णांक अंकगणित और तर्क के लिए अंश कार्यसाधन सहित ऑपरेटरों के समृद्ध चयन का समर्थन करती है और संभवतः दशमलव संख्याएं के विभिन्न आकार - यह उचित रूप से संरचित डेटा को प्रभावी ढंग से संसाधित कर सकती है। | ||
* C अधिक छोटी भाषा है, केवल कुछ मुट्ठी भर विवरणों के साथ और बहुत अधिक विशेषताओं के अतिरिक्त जो व्यापक लक्ष्य | * C अधिक छोटी भाषा है, केवल कुछ मुट्ठी भर विवरणों के साथ और बहुत अधिक विशेषताओं के अतिरिक्त जो व्यापक लक्ष्य संकेत उत्पन्न करते हैं - यह समझ में आता है। | ||
* C का मेमोरी आवंटन और | * C का मेमोरी आवंटन और विस्थापन पर सीधा नियंत्रण है, जो मेमोरी-संचालन ऑपरेशंस को उचित दक्षता और पूर्वानुमेय समय देता है, छिटपुट [[स्टॉप-द-वर्ल्ड]] कचरा संग्रह घटनाओं के लिए किसी भी चिंता के अतिरिक्त - इसका पूर्वानुमान योग्य प्रदर्शन है। | ||
* प्लेटफ़ॉर्म हार्डवेयर को सूचक और प्ररूप पनिंग के साथ अभिगम किया जा सकता है, इसलिए प्रणाली-विशिष्ट विशेषताएं | * प्लेटफ़ॉर्म हार्डवेयर को सूचक और प्ररूप पनिंग के साथ अभिगम किया जा सकता है, इसलिए प्रणाली-विशिष्ट विशेषताएं जैसे नियंत्रण / स्थिति रजिस्टर , मेमोरी-मैप्ड I/O|I/O रजिस्टर) को कॉन्फ़िगर किया जा सकता है। C में लिखे संकेत के साथ उपयोग किया जा सकता है - यह अच्छी प्रकार से परस्पर प्रभाव करता है जिस प्लेटफॉर्म पर यह चल रहा है। | ||
* लिंकर और पर्यावरण के आधार पर,C | * लिंकर और पर्यावरण के आधार पर,C संकेत सभा भाषा में लिखी गई पुस्तकालय को भी कॉल कर सकता है, और सभा भाषा से कॉल किया जा सकता है - यह अन्य निचले स्तर के संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है। | ||
* C और इसके कॉलिंग सम्मेलनों और लिंकर संरचनाओं का उपयोग सामान्यतः अन्य उच्च-स्तरीय भाषाओं के संयोजन के साथ किया जाता है, जिसमेंC औरC दोनों से कॉल समर्थित हैं - यह अन्य उच्च-स्तरीय | * C और इसके कॉलिंग सम्मेलनों और लिंकर संरचनाओं का उपयोग सामान्यतः अन्य उच्च-स्तरीय भाषाओं के संयोजन के साथ किया जाता है, जिसमेंC औरC दोनों से कॉल समर्थित हैं - यह अन्य उच्च-स्तरीय संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है। | ||
* C के पास बहुत ही परिपक्व और व्यापक पारिस्थितिकी तंत्र | * C के पास बहुत ही परिपक्व और व्यापक पारिस्थितिकी तंत्र है। जिसमें पुस्तकालय, फ्रेमवर्क, ओपन स्रोत संकलक , डिबगर्स और उपयोगिता ज सम्मलित हैं और यह वास्तविक मानक है। यह संभावना है कि ड्राइवर पहले से ही C में उपस्तिथ हैं,C संकलक के बैक-और के समान CPU स्थापत्य है, इसलिए दूसरी भाषा चुनने के लिए प्रोत्साहन कम है। | ||
=== बार वेब | === बार वेब विकास के लिए उपयोग किया जाता है === | ||
ऐतिहासिक रूप से | ऐतिहासिक रूप से C को कभी-कभी वेब एप्लिकेशन, सर्वर और ब्राउज़र के बीच सूचना के लिए गेटवे के रूप में [[कॉमन गेटवे इंटरफ़ेस|कॉमन गेटवे]] अंतराफलक (C GI) का उपयोग करके वेब विकास के लिए उपयोग किया जाता था।<ref name="Dobbs 1995">{{cite book |title=डॉ। डॉब की सोर्सबुक|publisher=Miller Freeman, Inc. |date=November–December 1995 |location=U.S.A.}}</ref>C को इसकी गति, स्थिरता और निकट-सार्वभौमिक उपलब्धता के कारण [[व्याख्या की गई भाषा]]ओं पर चुना गया हो सकता है।<ref name="linuxjournal 2005">{{cite web |url=http://www.linuxjournal.com/article/6863 |publisher=linuxjournal.com |title=CGI प्रोग्रामिंग के लिए C का उपयोग करना|access-date=January 4, 2010 |date=March 1, 2005 |archive-date=February 13, 2010 |archive-url=https://web.archive.org/web/20100213075858/http://www.linuxjournal.com/article/6863 |url-status=live }}</ref>C में वेब विकास के लिए अब यह सामान्य अभ्यास नहीं है,<ref>{{cite web |last1=Perkins |first1=Luc |title=सी में वेब विकास: पागल? या लोमड़ी की तरह पागल?|url=https://medium.com/@lucperkins/web-development-in-c-crazy-or-crazy-like-a-fox-ff723209f8f5 |website=Medium |language=en |date=17 September 2013}}</ref> और कई अन्य वेब विकास उपकरण उपस्तिथ हैं। | ||
=== कुछ अन्य भाषाएँ | === कुछ अन्य भाषाएँ स्वयं C में लिखी गई हैं। C की व्यापक उपलब्धता और दक्षता का परिणाम यह है कि अन्य प्रोग्रामिंग भाषाओं के संकलक , पुस्तकालय और इंटरप्रेटर (कंप्यूटिंग) अधिकांशतःC में लागू होते हैं।<ref>{{Cite web |date=2018-11-13 |title=C - सभी भाषाओं की जननी|url=https://ict.iitk.ac.in/c-the-mother-of-all-languages/ |access-date=2022-10-11 |website=ICT Academy at IITK |language=en-US}}</ref> उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के [[संदर्भ कार्यान्वयन]],<ref>{{Cite web |title=1. सी या सी ++ के साथ पायथन का विस्तार - पायथन 3.10.7 प्रलेखन|url=https://docs.python.org/3/extending/extending.html |access-date=2022-10-11 |website=docs.python.org}}</ref> मैक्तिक,<ref>{{Cite web |title=पर्ल 5 इंजन का अवलोकन {{!}} Opensource.com|url=https://opensource.com/article/18/1/perl-5-engine |access-date=2022-10-11 |website=opensource.com |language=en}}</ref> रूबी (प्रोग्रामिंग भाषा),<ref>{{Cite web |title=सी और सी ++ से रूबी के लिए|url=https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/ |access-date=2022-10-11 |website=www.ruby-lang.org}}</ref> और PHP<ref>{{Cite web |date=2022-08-03 |title=पीएचपी क्या है? अपना पहला PHP प्रोग्राम कैसे लिखें|url=https://www.freecodecamp.org/news/what-is-php-write-your-first-php-program/ |access-date=2022-10-11 |website=freeCodeCamp.org |language=en}}</ref>C में लिखे गए हैं। | ||
C की व्यापक उपलब्धता और दक्षता का परिणाम यह है कि अन्य प्रोग्रामिंग भाषाओं के संकलक , पुस्तकालय और इंटरप्रेटर (कंप्यूटिंग) अधिकांशतःC में लागू होते हैं।<ref>{{Cite web |date=2018-11-13 |title=C - सभी भाषाओं की जननी|url=https://ict.iitk.ac.in/c-the-mother-of-all-languages/ |access-date=2022-10-11 |website=ICT Academy at IITK |language=en-US}}</ref> उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के [[संदर्भ कार्यान्वयन]],<ref>{{Cite web |title=1. सी या सी ++ के साथ पायथन का विस्तार - पायथन 3.10.7 प्रलेखन|url=https://docs.python.org/3/extending/extending.html |access-date=2022-10-11 |website=docs.python.org}}</ref> मैक्तिक,<ref>{{Cite web |title=पर्ल 5 इंजन का अवलोकन {{!}} Opensource.com|url=https://opensource.com/article/18/1/perl-5-engine |access-date=2022-10-11 |website=opensource.com |language=en}}</ref> रूबी (प्रोग्रामिंग भाषा),<ref>{{Cite web |title=सी और सी ++ से रूबी के लिए|url=https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/ |access-date=2022-10-11 |website=www.ruby-lang.org}}</ref> और PHP<ref>{{Cite web |date=2022-08-03 |title=पीएचपी क्या है? अपना पहला PHP प्रोग्राम कैसे लिखें|url=https://www.freecodecamp.org/news/what-is-php-write-your-first-php-program/ |access-date=2022-10-11 |website=freeCodeCamp.org |language=en}}</ref>C में लिखे गए हैं। | |||
=== कम्प्यूटेशनल-गहन पुस्तकालयों के लिए प्रयुक्त === | === कम्प्यूटेशनल-गहन पुस्तकालयों के लिए प्रयुक्त === | ||
C प्रोग्रामर को कलन विधि और डेटा संरचनाओं के कुशल कार्यान्वयन के लिए सक्षम बनाता है, क्योंकि हार्डवेयर से अमूर्तता की परत पतली है, और इसका उपरि कम है, कम्प्यूटेशनल रूप से गहन कार्यक्रमों के लिए महत्वपूर्ण मानदंड है। उदाहरण के लिए, [[जीएनयू मल्टीपल प्रेसिजन अरिथमेटिक लाइब्रेरी|GNU | C प्रोग्रामर को कलन विधि और डेटा संरचनाओं के कुशल कार्यान्वयन के लिए सक्षम बनाता है, क्योंकि हार्डवेयर से अमूर्तता की परत पतली है, और इसका उपरि कम है, कम्प्यूटेशनल रूप से गहन कार्यक्रमों के लिए महत्वपूर्ण मानदंड है। उदाहरण के लिए, [[जीएनयू मल्टीपल प्रेसिजन अरिथमेटिक लाइब्रेरी|GNU एकाधिक परिशुद्धता अंकगणितीय पुस्तकालय]], [[जीएनयू वैज्ञानिक पुस्तकालय|GNU वैज्ञानिक पुस्तकालय]], [[मेथेमेटिका|अंक शास्त्र]] और [[MATLAB|मतलब]] पूरी प्रकार या आंशिक रूप से C में लिखे गए हैं। कई भाषाएँ C में पुस्तकालय फ़ंक्शन को कॉल करने का समर्थन करती हैं, उदाहरण के लिए, Python (प्रोग्रामिंग भाषा)-आधारित फ्रेमवर्क [[NumPy]] उपयोग करता है C उच्च-प्रदर्शन और हार्डवेयर-इंटरैक्टिंग पहलुओं के लिए है । | ||
=== C [[मध्यवर्ती भाषा]] के रूप में === | === C [[मध्यवर्ती भाषा]] के रूप में === | ||
C को कभी-कभी अन्य भाषाओं के कार्यान्वयन द्वारा मध्यवर्ती भाषा के रूप में प्रयोग किया जाता है। सुवाह्यता या सुविधा के लिए इस दृष्टिकोण का उपयोग किया जा सकता है;C को मध्यवर्ती भाषा के रूप में उपयोग करके, अतिरिक्त मशीन-विशिष्ट | C को कभी-कभी अन्य भाषाओं के कार्यान्वयन द्वारा मध्यवर्ती भाषा के रूप में प्रयोग किया जाता है। सुवाह्यता या सुविधा के लिए इस दृष्टिकोण का उपयोग किया जा सकता है;C को मध्यवर्ती भाषा के रूप में उपयोग करके, अतिरिक्त मशीन-विशिष्ट संकेत जेनरेटर आवश्यक नहीं हैं।C में कुछ विशेषताएं हैं, जैसे कि लाइन-नंबर पूर्वप्रक्रमक निर्देश और प्रारंभकर्ता सूचियों के अंत में वैकल्पिक अतिरिक्त अल्पविराम, जो उत्पन्न संकेत के संकलन का समर्थन करते हैं। चूंकि,C की कुछ कमियों ने सी-परिवार प्रोग्रामिंग भाषाओं की अन्य सूची के विकास को प्रेरित किया है। सी-आधारित भाषाओं को विशेष रूप से मध्यवर्ती भाषाओं के रूप में उपयोग करने के लिए रचना किया गया है, जैसे [[सी--|C--]]। इसके अतिरिक्त, समकालीन प्रमुख संकलक GNU संकलक संग्रह और [[LLVM]] दोनों में [[मध्यवर्ती प्रतिनिधित्व]] है जोC नहीं है, और वे संकलक C सहित कई भाषाओं के लिए अग्रभाग का समर्थन करते हैं। | ||
=== | === अंतिम-उपयोगकर्ता अनुप्रयोग === | ||
[[एंड-यूज़र (कंप्यूटर साइंस)|और - | [[एंड-यूज़र (कंप्यूटर साइंस)|और -उपयोगकर्ता (कंप्यूटर विज्ञान)]] | अंतिम-उपयोगकर्ता अनुप्रयोग को लागू करने के लिए C का भी व्यापक रूप से उपयोग किया गया है। चूँकि, ऐसे अनुप्रयोग नई उच्च-स्तरीय भाषाओं में भी लिखे जा सकते हैं। | ||
== सीमाएं == | == सीमाएं == | ||
चूँकि C लोकप्रिय, प्रभावशाली और अति सफल रहा है, इसमें कमियां सम्मलित हैं। | |||
* K साथ मानक गतिशील स्मृति से निपटने <code>malloc</code> तथा <code>free</code> त्रुटि प्रवण है। बग में सम्मलित हैं: स्मृति आवंटित होने पर मेमोरी लीक होती है किन्तु मुक्त नहीं होती है और पहले से मुक्त स्मृति तक पहुंच। | |||
* | |||
* सूचक के उपयोग और मेमोरी के प्रत्यक्ष कार्यसाधन का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, संभवतः प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण। | * सूचक के उपयोग और मेमोरी के प्रत्यक्ष कार्यसाधन का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, संभवतः प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण। | ||
* कुछ प्रकार की जाँच होती है, | * कुछ प्रकार की जाँच होती है, किन्तु यह विविध कार्यों जैसे क्षेत्रों पर लागू नहीं होती है और प्रकार की जाँच तुच्छ या अनजाने में की जा सकती है। | ||
* चूंकि संकलक द्वारा उत्पन्न | * चूंकि संकलक द्वारा उत्पन्न संकेत में कुछ चेक ही होते हैं, प्रोग्रामर पर सभी संभावित परिणामों पर विचार करने का बोझ होता है, और अंतर्रोधी अधिवहित , सरणी सीमा जाँच , स्टैक अतिप्रवाह , मेमोरी थकावट, दौड़ की स्थिति, सूत्र एकांत आदि से बचाव होता है। | ||
* सूचक का उपयोग और इनके क्रम कार्यसाधन का अर्थ है कि ही डेटा (अलियासिंग) तक पहुंचने के दो विधि हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं,C में संभव नहीं हैं। फोरट्रान को तेज माना जाता है। | * सूचक का उपयोग और इनके क्रम कार्यसाधन का अर्थ है कि ही डेटा (अलियासिंग) तक पहुंचने के दो विधि हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं,C में संभव नहीं हैं। फोरट्रान को तेज माना जाता है। | ||
* कुछ मानक पुस्तकालय कार्य, उदाहरण। <code> | * कुछ मानक पुस्तकालय कार्य, उदाहरण। <code>scan f</code>, अंतर्रोधी अधिवहित का कारण बन सकता है। | ||
* उत्पन्न | * उत्पन्न संकेत में निम्न-स्तरीय प्रकार के समर्थन में सीमित मानकीकरण है, उदाहरण के लिए: अलग-अलग फ़ंक्शन [[कॉलिंग कन्वेंशन]] और [[अनुप्रयोग बाइनरी इंटरफ़ेस|अनुप्रयोग बाइनरी]] अंतराफलक विभिन्न संरचना परत सम्मेलन बड़े पूर्णांक सहित के भीतर अलग-अलग बाइट आदेश करना। कई भाषा कार्यान्वयनों में इनमें से कुछ विकल्पों को पूर्वप्रक्रमक निर्देश के साथ नियंत्रित किया जा सकता है <code>#pragma</code>,<ref>{{Cite web |last=corob-msft |title=प्रागमा निर्देश और __pragma और _Pragma कीवर्ड|url=https://learn.microsoft.com/en-us/cpp/preprocessor/pragma-directives-and-the-pragma-keyword |access-date=2022-09-24 |website=learn.microsoft.com |language=en-us}}</ref><ref>{{Cite web |title=प्रागमास (द सी प्रीप्रोसेसर)|url=https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html |access-date=2022-09-24 |website=gcc.gnu.org}}</ref> और कुछ अतिरिक्त खोजशब्दों के साथ उदा. उपयोग <code>__cdec l</code> कॉलिंग कन्वेंशन। किन्तु निर्देश और विकल्प लगातार समर्थित नहीं हैं।<ref>{{cite web |title=प्रागमास|url=https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/pragmas.html |website=Intel |access-date=2022-04-10 |language=en}}</ref> | ||
* मानक पुस्तकालय का उपयोग | * मानक पुस्तकालय का उपयोग कर C स्ट्रिंग संचालन कोड-गहन है, जिसमें स्पष्ट स्मृति प्रबंधन आवश्यक है। | ||
* भाषा सीधे प्रयोजन | * भाषा सीधे प्रयोजन अभिविन्यास , प्ररूप आत्मनिरीक्षण , क्रम मूल्यांकन , सामान्य आदि का समर्थन नहीं करती है। | ||
* भाषा सुविधाओं के अनुचित उपयोग के विरुद्ध बहुत कम सुरक्षा उपाय हैं, जिसके कारण | * भाषा सुविधाओं के अनुचित उपयोग के विरुद्ध बहुत कम सुरक्षा उपाय हैं, जिसके कारण संकेत अनुरक्षणीय नहीं हो सकता है। मुश्किल संकेत के लिए यह सुविधा [[अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता|अंतर्राष्ट्रीय अस्पष्ट C संकेत प्रतियोगिता]] और गुप्त C प्रतियोगिता जैसी प्रतियोगिताओं के साथ मनाई गई है। | ||
* C अपवाद संचालन के लिए मानक समर्थन की कमी है और केवल त्रुटि जांच के लिए [[वापसी कोड]] प्रदान करता है। सेटजम्प.एच |<code> | * C अपवाद संचालन के लिए मानक समर्थन की कमी है और केवल त्रुटि जांच के लिए [[वापसी कोड|वापसी]] संकेत प्रदान करता है। सेटजम्प.एच |<code>set jmp</code> तथा <code>longjmp</code>में मानक पुस्तकालय कार्यों का उपयोग किया गया है<ref>{{cite journal |last1=Roberts |first1=Eric S. |title=सी में अपवादों को लागू करना|date=21 March 1989 |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/tech_reports/SRC-RR-40.pdf |access-date=4 January 2022 |publisher=[[DEC Systems Research Center]] |id=SRC-RR-40}}</ref> मैक्रोज़ के माध्यम से कोशिश-पकड़ तंत्र को लागू करने के लिए। | ||
कुछ उद्देश्यों के लिए,C की प्रतिबंधित शैलियों को अपनाया गया है, | कुछ उद्देश्यों के लिए,C की प्रतिबंधित शैलियों को अपनाया गया है, उदाहरण MISRAC या CERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। [[सामान्य कमजोरियों की गणना]] जैसे डेटाबेस C आदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए अनुशंसा भी करते हैं। | ||
ऐसे | ऐसे भाषा उपकरण हैं जो कुछ कमियों को दूर कर सकते हैं। समकालीन C संकलनकर्ता में चेक सम्मलित हैं जो कई संभावित बगों की पहचान करने में सहायता के लिए चेतावनियां उत्पन्न कर सकते हैं। | ||
इनमें से कुछ कमियों ने अन्य भाषाओं के निर्माण को प्रेरित किया है। | इनमें से कुछ कमियों ने अन्य भाषाओं के निर्माण को प्रेरित किया है। | ||
== संबंधित भाषाएँ == | == संबंधित भाषाएँ == | ||
[[File:Tiobe index 2020 may.png|alt=|thumb|टीआईओबीई सूचकांक ग्राफ, विभिन्न प्रोग्रामिंग भाषाओं की लोकप्रियता की तुलना दिखा रहा है<ref name="MmjNC">{{cite magazine |url=https://www.wired.com/2013/01/java-no-longer-a-favorite/ |title=क्या जावा अपना मोजो खो रहा है?|first1=Robert |last1=McMillan |date=August 1, 2013 |magazine=[[Wired (magazine)|Wired]] |access-date=March 5, 2017 |archive-date=February 15, 2017 |archive-url=https://web.archive.org/web/20170215115409/https://www.wired.com/2013/01/java-no-longer-a-favorite/ |url-status=live }}</ref>]]C ने | [[File:Tiobe index 2020 may.png|alt=|thumb|टीआईओबीई सूचकांक ग्राफ, विभिन्न प्रोग्रामिंग भाषाओं की लोकप्रियता की तुलना दिखा रहा है<ref name="MmjNC">{{cite magazine |url=https://www.wired.com/2013/01/java-no-longer-a-favorite/ |title=क्या जावा अपना मोजो खो रहा है?|first1=Robert |last1=McMillan |date=August 1, 2013 |magazine=[[Wired (magazine)|Wired]] |access-date=March 5, 2017 |archive-date=February 15, 2017 |archive-url=https://web.archive.org/web/20170215115409/https://www.wired.com/2013/01/java-no-longer-a-favorite/ |url-status=live }}</ref>]]C ने C++, स्पष्ट प्रोग्रामिंग भाषा C, D प्रोग्रामिंग भाषा, GO प्रोग्रामिंग भाषा, जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, मैक्तिक, PHP, रस्ट प्रोग्रामिंग जैसी कई बाद की भाषाओं को प्रत्यक्ष और अप्रत्यक्ष रूप से प्रभावित किया है। भाषा और यूनिक्स का C शेल।<ref name="kafmy">{{Cite book|title=कंप्यूटिंग के स्तंभ: चुनिंदा, महत्वपूर्ण प्रौद्योगिकी फर्मों का एक संग्रह|last1=O'Regan |first1=Gerard |isbn=978-3319214641 |oclc=922324121 |date=September 24, 2015}}</ref> सबसे व्यापक प्रभाव वाक्य-विन्यास रहा है। उल्लिखित सभी भाषाएं विवरण और अधिक या कम पहचानने योग्य अभिव्यक्तिC [[बेल्ट]] को प्ररूप प्रणाली, डेटा मॉडल बड़े पैमाने पर प्रोग्राम संरचनाओं के साथ जोड़ती हैं जो C से भिन्न होती हैं, कभी-कभी मूल रूप से होती हैं। | ||
Ch (कंप्यूटर प्रोग्रामिंग) और C INT सहित कई C या निकट-C दुभाषिया उपस्तिथ हैं, जिनका उपयोग पटकथा के लिए भी किया जा सकता है। | |||
जब प्रयोजन - | जब प्रयोजन -अभिविन्यस्त प्रोग्रामिंग भाषा लोकप्रिय हुईं, तो C ++ और प्रयोजन -C, C के दो अलग-अलग थे जो प्रयोजन -अभिविन्यस्त क्षमताएं प्रदान करते थे। दोनों भाषाओं को मूल रूप से स्रोत-से-स्रोत संकलक के रूप में लागू किया गया था स्रोत संकेत का C में अनुवाद किया गया था और फिर C संकलक के साथ संकलित किया गया था।<ref name="dSI6f">{{Cite book |title=समानांतर कंप्यूटिंग के लिए भाषाएं और संकलक: 16वीं अंतर्राष्ट्रीय कार्यशाला, एलसीपीसी 2003, कॉलेज स्टेशन, टेक्सास, यूएसए, 2-4 अक्टूबर, 2003: संशोधित पेपर|last1=Rauchwerger |first1=Lawrence |date=2004 |publisher=Springer |isbn=978-3540246442 |oclc=57965544}}</ref>C ++ प्रोग्रामिंग भाषा मूल रूप से C विद [[वर्ग (प्रोग्रामिंग)]] को [[Bjarne Stroustrup|बज़्ने स्ट्रॉस्ट्रुप]] द्वारा प्रयोजन -अभिविन्यस्त प्रोग्रामिंग प्रदान करने के दृष्टिकोण के रूप में तैयार किया गया था। C -जैसे वाक्य-विन्यास के साथ प्रयोजन -अभिविन्यस्त कार्यक्षमता।<ref name="stroustrup 1993">{{cite web |url=http://www.stroustrup.com/hopl2.pdf |title=सी++ का इतिहास: 1979−1991|first1=Bjarne |last1=Stroustrup |author-link=Bjarne Stroustrup |year=1993 |access-date=June 9, 2011 |archive-date=February 2, 2019 |archive-url=https://web.archive.org/web/20190202050609/http://www.stroustrup.com/hopl2.pdf |url-status=live }}</ref> C ++ प्रयोजन -अभिविन्यस्त प्रोग्रामिंग में उपयोगी अधिक प्ररूपिंग सामर्थ्य, स्कूपिंग और अन्य उपकरण जोड़ता है और खाका के माध्यम से [[सामान्य प्रोग्रामिंग]] की अनुमति देता है। लगभग C , C ++ का उत्तम चयन अब C [[सी और सी ++ की संगतता|औरC ++ की संगतता]] के साथ अधिकांश C का समर्थन करता है। | ||
C ++ प्रोग्रामिंग भाषा | |||
प्रयोजन | प्रयोजन-C मूल रूप से C के ऊपर बहुत पतली परत थी और C का दृढ़ उत्तम चयन बना हुआ है जो संकर गतिशील स्थिर प्ररूपिंग प्रतिमान का उपयोग करके प्रयोजन -अभिविन्यस्त प्रोग्रामिंग की अनुमति देता है। प्रयोजन -C अपने वाक्य-विन्यास को C और लघु वार्ता दोनों से प्राप्त करता है। वाक्य-विन्यास जिसमें प्रीप्रोसेसिंग, फ़ंक्शन घोषणा और फ़ंक्शन कॉल सम्मलित हैं। C से विरासत में मिला है, चूँकि प्रयोजन -अभिविन्यस्त सुविधाओं के लिए वाक्य-विन्यास मूल रूप से लघु वार्ता से लिया गया था। | ||
C ++ और | C ++ और उद्देश्य -C के अतिरिक्त, Ch (कंप्यूटर प्रोग्रामिंग), [[Cilk]] और एकीकृत समानांतर C ,C के लगभग उत्तम चयन हैं। | ||
== यह भी देखें == | == यह भी देखें == | ||
{{Portal|Computer programming|Free and open-source software}} | {{Portal|Computer programming|Free and open-source software}} | ||
* C | * C और C ++ की संगतता | ||
* [[पास्कल और सी की तुलना|पास्कल औरC की तुलना]] | * [[पास्कल और सी की तुलना|पास्कल औरC की तुलना]] | ||
* [[प्रोग्रामिंग भाषाओं की तुलना]] | * [[प्रोग्रामिंग भाषाओं की तुलना]] | ||
* अंतर्राष्ट्रीय | * अंतर्राष्ट्रीय अस्पष्ट C संकेत प्रतियोगिता | ||
* [[सी-आधारित प्रोग्रामिंग भाषाओं की सूची]] | * [[सी-आधारित प्रोग्रामिंग भाषाओं की सूची|C-आधारित प्रोग्रामिंग भाषाओं की सूची]] | ||
* [[सी कंपाइलर्स की सूची|C संकलनकर्ता की सूची]] | * [[सी कंपाइलर्स की सूची|C संकलनकर्ता की सूची]] | ||
Line 527: | Line 515: | ||
* {{cite book |last1=Plauger |first1=P.J. |author-link=P. J. Plauger |title=The Standard C Library |edition=1 |year=1992 |publisher=Prentice Hall |isbn=978-0131315099}} <small>[https://github.com/wuzhouhui/c_standard_lib ''(sourC e)'']</small> | * {{cite book |last1=Plauger |first1=P.J. |author-link=P. J. Plauger |title=The Standard C Library |edition=1 |year=1992 |publisher=Prentice Hall |isbn=978-0131315099}} <small>[https://github.com/wuzhouhui/c_standard_lib ''(sourC e)'']</small> | ||
* {{cite book |last1=Banahan |first1=M. |last2=Brady |first2=D. |last3=Doran |first3=M. |title=The C Book: Featuring the ANSI C Standard |edition=2 |year=1991 |publisher=Addison-Wesley |isbn=978-0201544336}} <small>[https://github.com/wardvanwanrooij/thecbook ''(free)'']</small> | * {{cite book |last1=Banahan |first1=M. |last2=Brady |first2=D. |last3=Doran |first3=M. |title=The C Book: Featuring the ANSI C Standard |edition=2 |year=1991 |publisher=Addison-Wesley |isbn=978-0201544336}} <small>[https://github.com/wardvanwanrooij/thecbook ''(free)'']</small> | ||
* {{cite book |last1=Harbison |first1=Samuel |last2=Steele |first2=Guy Jr. |title=C: A Reference Manual |edition=5 |year=2002 |publisher=Pearson |isbn=978-0130895929}} <small>[https://archive.org/details/creferencemanual00harb ''( | * {{cite book |last1=Harbison |first1=Samuel |last2=Steele |first2=Guy Jr. |title=C: A Reference Manual |edition=5 |year=2002 |publisher=Pearson |isbn=978-0130895929}} <small>[https://archive.org/details/creferencemanual00harb ''(arChive)'']</small> | ||
* {{cite book |last1=King |first1=K.N. |title=C Programming: A Modern Approach |edition=2 |date=2008 |publisher=W. W. Norton |isbn=978-0393979503}} <small>[https://archive.org/details/cprogrammingmode0000king ''( | * {{cite book |last1=King |first1=K.N. |title=C Programming: A Modern Approach |edition=2 |date=2008 |publisher=W. W. Norton |isbn=978-0393979503}} <small>[https://archive.org/details/cprogrammingmode0000king ''(arChive)'']</small> | ||
* {{cite book |last1=Griffiths |first1=David |last2=Griffiths |first2=Dawn |title=Head First C |edition=1 |date=2012 |publisher=O'Reilly | * {{cite book |last1=Griffiths |first1=David |last2=Griffiths |first2=Dawn |title=Head First C |edition=1 |date=2012 |publisher=O'Reilly | ||
|isbn=978-1449399917}} | |isbn=978-1449399917}} | ||
Line 600: | Line 588: | ||
** {{cite web|url= http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf |title=C99 with Technical corrigenda TC1, TC2, and TC3 included }} {{small|(3.61 MB)}} | ** {{cite web|url= http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf |title=C99 with Technical corrigenda TC1, TC2, and TC3 included }} {{small|(3.61 MB)}} | ||
* [https://c-faq.com/ C omp.lang.C Frequently Asked Questions] | * [https://c-faq.com/ C omp.lang.C Frequently Asked Questions] | ||
* [http://csapp.cs.cmu.edu/3e/docs/chistory.html A History of C] , by Dennis | * [http://csapp.cs.cmu.edu/3e/docs/chistory.html A History of C] , by Dennis RitChie | ||
* [https://en.cppreference.com/w/c C Library ReferenC e and Examples] | * [https://en.cppreference.com/w/c C Library ReferenC e and Examples] | ||
Line 608: | Line 596: | ||
{{Authority control}} | {{Authority control}} | ||
[[Category: | |||
[[Category:1972 में बनाई गई प्रोग्रामिंग भाषा]] | |||
[[Category:Articles with hatnote templates targeting a nonexistent page]] | |||
[[Category:CS1 English-language sources (en)]] | |||
[[Category:CS1 errors]] | |||
[[Category:Citation Style 1 templates|M]] | |||
[[Category:Collapse templates]] | |||
[[Category:Created On 01/12/2022]] | |||
[[Category:Interwiki link templates| ]] | |||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Multi-column templates]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages using Sister project links with default search|q]] | |||
[[Category:Pages using div col with small parameter]] | |||
[[Category:Pages with empty portal template]] | |||
[[Category:Pages with reference errors]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Portal templates with redlinked portals]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates based on the Citation/CS1 Lua module]] | |||
[[Category:Templates generating COinS|Cite magazine]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Templates using under-protected Lua modules]] | |||
[[Category:Webarchive template wayback links]] | |||
[[Category:Wikipedia fully protected templates|Sister project links]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:अमेरिकी आविष्कार]] | [[Category:अमेरिकी आविष्कार]] | ||
[[Category: | [[Category:आईएसओ मानक के साथ प्रोग्रामिंग भाषाएं]] | ||
[[Category:सी | [[Category:उच्च स्तरीय प्रोग्रामिंग भाषाएं]] | ||
[[Category:उदाहरण सी कोड वाले लेख]] | |||
[[Category:क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] | [[Category:क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] | ||
[[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएं]] | [[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएं]] | ||
[[Category: संरचित | [[Category:संरचित प्रोग्रामिंग भाषाएं]] | ||
[[Category:सांख्यिकीय रूप से टाइप की गई प्रोग्रामिंग भाषाएं]] | [[Category:सांख्यिकीय रूप से टाइप की गई प्रोग्रामिंग भाषाएं]] | ||
[[Category: सिस्टम प्रोग्रामिंग भाषाएं]] | [[Category:सिस्टम प्रोग्रामिंग भाषाएं]] | ||
[[Category:सी (प्रोग्रामिंग भाषा)| ]] | |||
[[Category:सी प्रोग्रामिंग भाषा परिवार]] | |||
[[Category: | |||
[[Category: |
Latest revision as of 20:33, 16 May 2023
Paradigm | Multi-paradigm: imperative (procedural), structured |
---|---|
द्वारा डिज़ाइन किया गया | Dennis Ritchie |
Developer | ANSI X3J11 (ANSI C); ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 14 (Working Group 14) (ISO C) |
पहली प्रस्तुति | 1972[1] |
Stable release | C17
/ June 2018 |
Preview release | |
टाइपिंग अनुशासन | Static, weak, manifest, nominal |
ओएस | Cross-platform |
फ़ाइल नाम एक्सटेंशनएस | .c, .h |
वेबसाइट | www www |
Major implementations | |
pcc, GCC, Clang, Intel C, C++Builder, Microsoft Visual C++, Watcom C | |
Dialects | |
Cyclone, Unified Parallel C, Split-C, Cilk, C* | |
Influenced by | |
B (BCPL, CPL), ALGOL 68,[3] assembly, PL/I, FORTRAN | |
Influenced | |
Numerous: AMPL, AWK, csh, C++, C--, C#, Objective-C, D, Go, Java, JavaScript, JS++, Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python, Rust, Seed7, Vala, Verilog (HDL),[4] Nim, Zig | |
|
C अक्षर से उच्चारित' होने वाले शब्द C को [5] सामान्य-उद्देश्य वाली कंप्यूटर प्रोग्रामिंग भाषा है। यह 1970 के दशक में डेनिस रिची द्वारा बनाया गया था। यह बहुत व्यापक रूप से उपयोगी और प्रभावशाली बना हुआ है। रचना के अनुसार, C की विशेषताएं लक्षित सीपीयू की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे संचालन प्रणाली, डिवाइस ड्राइवर, प्रोटोकॉल स्टैक में स्थायी उपयोग मिला है, चूंकि कम हो रहा है।[6] अनुप्रयोग प्रक्रिया सामग्री के लिए C का उपयोग सामान्यतः कंप्यूटर स्थापत्य पर किया जाता है जो सबसे बड़े सुपरकंप्यूटर से लेकर सबसे छोटे सूक्ष्म नियंत्रक और अंतः स्थापित प्रणाली तक होता है।
प्रोग्रामिंग भाषा C के उत्तराधिकारी, C को मूल रूप से यूनिक्स पर चलने वाली उपयोगिताओं के निर्माण के लिए 1972 और 1973 के बीच रिची द्वारा बेल लैब्स में विकसित किया गया था। इसे यूनिक्स संचालन प्रणाली के कर्नेल को फिर से लागू करने के लिए लागू किया गया था।[7]1980 के दशक के पर्यन्त, C ने धीरे-धीरे लोकप्रियता प्राप्त की। यह मापने वाली प्रोग्रामिंग भाषा की लोकप्रियता बन गई है,[8][9] यह C संकलक के साथ लगभग उपलब्ध है। सभी आधुनिक कंप्यूटर स्थापत्य और संचालन प्रणाली C को 1989 से अमेरिकी राष्ट्रीय स्टैंडर्ड संस्थान (ANSI C ) और अंतर्राष्ट्रीय स्टैंडर्डीकरण संगठन (ISO) द्वारा स्टैंडर्डीकृत किया गया है।
C स्थिर प्रकार की प्रणाली के साथ संरचित प्रोग्रामिंग, शाब्दिक चर विस्तारऔर रिकर्सन कंप्यूटर विज्ञान का समर्थन करने वाली अनिवार्य प्रोग्रामिंग प्रक्रियात्मक प्रोग्रामिंग भाषा है। इसे निम्न-स्तरीय प्रोग्रामिंग भाषा प्रदान करने के लिए संकलक के रूप में रचना किया गया था। स्मृति और भाषा के लिए निम्न-स्तरीय पहुंच मशीन संकेत के लिए कुशलता से मानचित्र बनाती है, सभी न्यूनतम क्रम प्रणाली के साथ इसकी निम्न-स्तरीय क्षमताओं के अतिरिक्त, भाषा को क्रॉस-प्लेटफ़ॉर्म प्रोग्रामिंग को प्रोत्साहित करने के लिए रचना किया गया था। विशिष्टता (तकनीकी स्टैंडर्ड) - अनुरूप्रोग्राम को सॉफ्टवेयर सुवाह्यता के साथ दिमाग में लिखा गया है, इसके स्रोत संकेत में कुछ बदलावों के साथ कंप्यूटर मंच और संचालन प्रणाली की विस्तृत विविधता के लिए संकलित किया जा सकता है।[10]
2000 के बाद से,C ने क्रमशः टीआईओबीई सूची में शीर्ष दो भाषाओं में स्थान दिया है, जो प्रोग्रामिंग भाषाओं की लोकप्रियता का पैमाना है।[11]
अवलोकन
C ऐल्गॉल परंपरा में अनिवार्य प्रोग्रामिंग प्रक्रियात्मक भाषा है। इसमें स्थिर प्रकार की प्रणाली है। C में सभी निष्पादन योग्य संकेत उप-दैनिकि जिसे फ़ंक्शन भी कहा जाता है, चूंकि कार्यात्मक प्रोग्रामिंग के अर्थ में नहीं के भीतर समाहित है। पैरामीटर (कंप्यूटर प्रोग्रामिंग) मूल्य द्वारा पारित किया जाता है, चूंकि सरणी डेटा प्रकार को सूचक कंप्यूटर प्रोग्रामिंग के रूप में पारित किया जाता है, अर्थात सरणी में पहले विषय का पता संदर्भ से गुजरें C में स्पष्ट रूप से अतिसूचक द्वारा संदर्भित की जा रही वस्तु के लिए असत्य है।
C प्रोग्राम स्रोत विवरण मुक्त रूप भाषा मुक्त प्रारूप है, जिसमें विवरण (प्रोग्रामिंग) विभाजक के रूप में सेमीकोलन का उपयोग किया जाता है और कथन के समूहीकरण खंड के लिए घुंघराले ब्रेसिज़ होते हैं।
सी भाषा निम्नलिखित विशेषताओं को भी प्रदर्शित करती है:
- भाषा में कीवर्ड की छोटी, निश्चित संख्या होती है, जिसमें नियंत्रण प्रवाह आदिमों का पूरा चयन सम्मलित होता है:
if/else
,for
,do/while
,while
, तथाswitch
उपयोगकर्ता-परिभाषित नाम किसी भी प्रकार के सिगिल (कंप्यूटर प्रोग्रामिंग) द्वारा खोज शब्दों से अलग नहीं हैं। - इसमें बड़ी संख्या में अंकगणित, बिटवाइज़और तर्क ऑपरेटर आदि हैं।
- कथन में से अधिक कार्यभार कंप्यूटर विज्ञान दिए जा सकते हैं।
- फ़ंक्शन:
- आवश्यकता न होने पर फंक्शन वापसी मूल्य को अनदेखा किया जा सकता है।
- फ़ंक्शन और डेटा सूचक तदर्थ क्रम बहुरूपता की अनुमति देते हैं।
- कार्यों को अन्य कार्यों के शाब्दिक सीमा में परिभाषित नहीं किया जा सकता है।
- चर को फंक्शन के भीतर परिभाषित किया जा सकता है, शाब्दिक चर विस्तारके साथ।
- फ़ंक्शन स्वयं कॉल कर सकता है, इसलिए रिकर्सन (कंप्यूटर विज्ञान) समर्थित है।
- डेटा प्ररूपिंग स्थिर प्ररूपिंग है, किन्तु मजबूत और कमजोर प्ररूपिंग सभी डेटा का प्रकार होता है, किन्तु निहित रूपांतरण संभव हैं।
- उपयोगकर्ता परिभाषित प्ररूपीफ और यौगिक प्रकार संभव हैं।
- विषम समुच्चय डेटा प्रकार (
struct
) संबंधित डेटा तत्वों को इकाई के रूप में अभिगम और निर्धारण करने की अनुमति दें। - संघ प्रकार अतिव्यापी सदस्यों के साथ संरचना है संग्रहीत अंतिम सदस्य ही मान्य है।
- सरणी डेटा प्ररूप सूची माध्यमिक अंकन है, जिसे सूचक अंकगणित के संदर्भ में परिभाषित किया गया है। संरचनाओं के विपरीत, सरणी याँ प्रथम श्रेणी की वस्तुएँ नहीं हैं: उन्हें अंतर्निर्मित ऑपरेटरों का उपयोग करके निर्धारण या तुलना नहीं की जा सकती है। परिभाषा में कोई सरणी कीवर्ड नहीं है इसके अतिरिक्त, उदाहरण के लिए, वर्गाकार कोष्ठक, वाक्यात्मक रूप से
month[11]
सरणी यों को इंगित करते हैं। - प्रगणित प्रकार
Enum
कीवर्ड के साथ संभव हैं। वे पूर्णांकों के साथ स्वतंत्र रूप से परस्पर परिवर्तनीय हैं। - स्ट्रिंग (कंप्यूटर विज्ञान) अलग डेटा प्रकार नहीं हैं, किन्तु परंपरागत रूप से C स्ट्रिंग संचालन को अशक्त-समाप्त स्ट्रिंग के रूप में किया जाता है। अशक्त-समाप्त चरित्र सरणी याँ।
- विषम समुच्चय डेटा प्रकार (
- मशीन के पतों को सूचक(कंप्यूटर प्रोग्रामिंग) में परिवर्तित करके कंप्यूटर मेमोरी तक निम्न-स्तरीय पहुंच संभव है।
- प्रक्रिया (कंप्यूटर विज्ञान) (उप-दैनिकि्स मान वापस नहीं कर रहे हैं) फ़ंक्शन का विशेष स्थिति है, अनपेक्षित वापसी प्रकार के साथ
void
. - लाइब्रेरी (कम्प्यूटिंग) के लिए कॉल के साथ मेमोरी फंक्शन के लिए गतिशील आवंटन हो सकती है।
- C पूर्वप्रक्रमक मैक्रो (कंप्यूटर विज्ञान) परिभाषा, स्रोत संकेत फ़ाइल समावेशन और प्रतिबंधात्मक संकलन करता है।
- मॉड्यूलर प्रोग्रामिंग का मूल रूप है: फाइलों को अलग से संकलित किया जा सकता है और लिंकर (कंप्यूटिंग) साथ, नियंत्रण के साथ जो स्थिर (कीवर्ड) के माध्यम से अन्य फाइलों के लिए कार्य और डेटा प्रयोजन दिखाई दे रहे हैं। इसके
statiC
तथाextern
गुण भी हैं। - इनपुट/आउटपुट या आई/ओ, स्ट्रिंग (कंप्यूटर विज्ञान) कार्यसाधन , और गणितीय कार्यों जैसी जटिल कार्यक्षमता क्रमशः लाइब्रेरी (कंप्यूटिंग) को सौंपी जाती है।
- संकलन के बाद उत्पन्न संकेत की अंतर्निहित प्लेटफॉर्म पर अपेक्षाकृत सीधी आवश्यकताएं होती हैं, जो इसे संचालन प्रणाली बनाने और अंतर्निहित प्रणाली में उपयोग के लिए उपयुक्त बनाती हैं।
चूँकि C में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं सम्मलित नहीं हैं जैसे वस्तु उन्मुख कार्यकर्म और कचरा संग्रह (कंप्यूटर विज्ञान)), इन्हें अधिकांशतः बाहरी लाइब्रेरीों के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। इसका उपयोग करने वालों में ग्लिब OS या बोहेम GC मुख्य थे।
अन्य भाषाओं से संबंध
C ++,C स्पष्ट प्रोग्रामिंग भाषा C, यूनिक्स की C आवरण, C (प्रोग्रामिंग भाषा), जाओ (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट सहित बाद की कई भाषाओं ने प्रत्यक्ष या अप्रत्यक्ष रूप से C से उद्धृत लिया है। ट्रांसपिलर्स), जूलिया (प्रोग्रामिंग भाषा), लिम्बो (प्रोग्रामिंग भाषा), एलपीसी (प्रोग्रामिंग भाषा), उद्देश्य सी, मैक्तिक, PHP, पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), जंग (प्रोग्रामिंग भाषा), स्विफ्ट (प्रोग्रामिंग) भाषा), वेरिलोग और प्रणाली वेरिलॉग हार्डवेयर विवरण भाषाएँ।[4] इन भाषाओं ने अपनी कई नियंत्रण संरचनाएं और अन्य आधारभूत विशेषताएं C से खींची हैं। उनमें से अधिकांश पायथन नाटकीय अपवाद होने के नाते C के लिए अत्यधिक समान वाक्य-विन्यास प्रोग्रामिंग भाषाएं भी व्यक्त करते हैं, और वे पहचानने योग्य अभिव्यक्ति और कथन C वाक्य-विन्यास को जोड़ते हैं अंतर्निहित प्रकार के प्रणाली, डेटा मॉडल और शब्दार्थ के साथ जो मौलिक रूप से भिन्न हो सकते हैं।
इतिहास
प्रारंभिक घटनाक्रम
वर्ष | C स्टैंडर्ड[10] |
---|---|
1972 | जन्म |
1978 | K और R C |
1989/1990 | ANSIC and ISO C |
1999 | C 99 |
2011 | C 11 |
2017 | C 17 |
TBD | C 2x |
C की उत्पत्ति यूनिक्स संचालन प्रणाली के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा PDP-7 पर भाषा में लागू की गई थी, जिसमें सहयोगियों के कई विचार सम्मलित थे। आखिरकार, उन्होंने संचालन प्रणाली को PDP-11 में पोर्ट करने का फैसला किया। यूनिक्स का मूल PDP-11 संस्करण भी जनसमूह भाषा में विकसित किया गया था।[7]
B
थॉम्पसन नए प्लेटफॉर्म के लिए उपयोगिताओं को बनाने के लिए प्रोग्रामिंग भाषा चाहता था। सबसे पहले, उन्होंने फोरट्रान संकलक बनाने की कोशिश की, किन्तु जल्द ही इस विचार को छोड़ दिया। इसके अतिरिक्त, उन्होंने जल्दी में ही में विकसित BCPL प्रणाली प्रोग्रामिंग भाषा कम करना संस्करण बनाया। BCPL का आधिकारिक विवरण उस समय उपलब्ध नहीं था,[12] और थॉम्पसन ने वाक्य-विन्यास को कम शब्दयुक्त होने के लिए संशोधित किया और सरलीकृत ऐल्गॉल के समान जिसे SM ऐल्गॉल के रूप में जाना जाता है।[13] परिणाम यह था कि थॉम्पसन ने B (प्रोग्रामिंग भाषा) कहा था।[7]उन्होंने B को बहुत सारे SM ऐल्गॉल वाक्य-विन्यास के साथ BC PL शब्दार्थ के रूप में वर्णित किया था।[13] BCPL मुख्य रूप से B के पास नई मशीनों को पोर्ट करने की सुविधा के लिए बूटस्ट्रैपिंग संकलक था।[13]चूँकि, कुछ उपयोगिताएँ अंततः B में लिखी गईं क्योंकि यह बहुत धीमी थी, और PDP-11 सुविधाओं जैसे बाइट संबोधनीयता का लाभ नहीं उठा सकती थी।
नई B और प्रथम C मुक्त करना
1971 में अधिक शक्तिशाली PDP -11 की विशेषताओं का उपयोग करने के लिए, रिची ने B में सुधार करना प्रारंभ किया। महत्वपूर्ण जोड़ चरित्र प्रकार था। उन्होंने इसे नई B कहा।[13] थॉम्पसन ने अनुसंधान यूनिक्स कर्नेल लिखने के लिए NB का उपयोग करना प्रारंभ किया और उनकी आवश्यकताओं ने भाषा के विकास की दिशा को आकार दिया।[13][14] 1972 तक, NB भाषा में समृद्ध प्रकार जोड़े गए: NB के पास सरणी याँ थीं int
तथा Char
. सूचक , अन्य प्रकार के सूचक उत्पन्न करने की क्षमता, सभी प्रकार की सरणियाँ, और फ़ंक्शन से लौटाए जाने वाले प्रकार भी जोड़े गए। अभिव्यक्तियों के भीतर सरणी याँ संकेत बन गईं। नया संकलक लिखा गया था, और भाषा का नाम बदलकर C कर दिया गया था।[7]
C संकलक और इसके साथ बनाई गई कुछ उपयोगिताओं को संस्करण 2 यूनिक्स में सम्मलित किया गया था, जिसे अनुसंधान यूनिक्स के रूप में भी जाना जाता है।[15]
संरचनाएं और यूनिक्स कर्नेल पुनर्लेखन
संस्करण 4 यूनिक्स में, नवंबर 1973 में प्रस्तुत किया गया, यूनिक्स कर्नेल (संचालन प्रणाली) को C में बड़े पैमाने पर फिर से लागू किया गया हैं।[7] इस समय तक,सी भाषा ने कुछ शक्तिशाली विशेषताएं प्राप्त कर ली थीं जैसे कि struct
का उपयोग किया जाता हैं।
C पूर्वप्रक्रमक को 1973 के आसपास एलन स्नाइडर (कंप्यूटर वैज्ञानिक) के आग्रह पर प्रस्तुत किया गया था और BCPL और PL/I में उपलब्ध फ़ाइल-समावेशन तंत्र की उपयोगिता की मान्यता में भी। इसके मूल संस्करण में केवल फाइलें और सरल स्ट्रिंग प्रतिस्थापन सम्मलित हैं: #include
तथा #define
पैरामीटर रहित मैक्रोज़ इसके तुरंत बाद, इसे तर्क और प्रतिबंधात्मक संकलन के साथ मैक्रोज़ को सम्मलित करने के लिए, अधिकांशतः माइक लेस्क और फिर जॉन रेसर द्वारा विस्तारित किया गया था।[7] यूनिक्स भाषा के अतिरिक्त किसी अन्य भाषा में लागू किए गए पहले संचालन प्रणाली कर्नेल में से था। पहले के उदाहरणों में 1961 में बरोज़ लार्ज प्रणाली्स जो ऐल्गॉल में लिखा गया था मॉलटिक्स प्रणाली के लिए जो PL/I में लिखा गया था और बरोज़ MC P (MC P) सम्मलित हैं। 1977, रिची और स्टीफन सी. जॉनसन ने यूनिक्स संचालन प्रणाली की सुवाह्यता को सुविधाजनक बनाने के लिए भाषा में और परिवर्तन किए जाते हैं। इस प्रकार जॉनसन के सुवाहय़ C संकलक ने नए प्लेटफॉर्म पर C के कई कार्यान्वयनों के आधार के रूप में कार्य किया।[14]
K और R C
1978 में, ब्रायन कर्निघन और डेनिस रिची ने सी प्रोग्रामिंग भाषा का पहला संस्करण प्रकाशित किया।[16] C प्रोग्राम को K और R, C के रूप में जाना जाने वाला यह पुस्तक, भाषा के अनौपचारिक विशिष्टता (तकनीकी स्टैंडर्ड) के रूप में कई वर्षों तक कार्य करता था। C के जिस संस्करण का वर्णन करता है उसे सामान्यतः 'के और आर सी ' के रूप में संदर्भित किया जाता है। जैसा कि यह 1978 में प्रस्तुत किया गया था, इसे C 78 भी कहा जाता है।[17] पुस्तक का दूसरा संस्करण[18] नीचे वर्णित ANSIC स्टैंडर्ड को सम्मलित करता है।
K और R C ने कई भाषा सुविधाओं प्रारंभ की।
- स्टैंडर्ड I/O लाइब्रेरी
long int
डेटा प्रकारunsigned int
डेटा प्रकार- फॉर्म के कंपाउंड कार्यभार ऑपरेटर
=op
(जैसे कि=-
) के रूप में बदल दिए गए थेop=
(वह है,-=
) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिएi=-10
, जिसकी व्याख्या की गई थीi =- 10
(i
में 10 का कमी) संभवतः प्रयोजन के अतिरिक्तi=-10
हो, तोi
-10 होने देना।
1989 के ANSI स्टैंडर्ड के प्रकाशन के बाद भी, कई वर्षों तक के और R C को अभी भी सबसे कम सामान्य विभाजक (कंप्यूटर) माना जाता था, जब अधिकतम सुवाह्यता वांछित होने पर C प्रोग्राम ने स्वत: को प्रतिबंधित कर दिया था, क्योंकि कई पुराने संकलक अभी भी उपयोग में थे और क्योंकि सावधानी से लिखा गया था K&RC संकेत कानूनी स्टैंडर्ड C भी हो सकता है।
C के प्रारंभिक संस्करणों में, केवल ऐसे कार्य जो अन्य प्रकारों को वापस करते हैं int
फ़ंक्शन परिभाषा से पहले उपयोग किए जाने पर घोषित किया जाना चाहिए पूर्व घोषणा के अतिरिक्त उपयोग किए गए कार्यों को वापसी प्रकार माना जाता था int
.
उदाहरण के लिए:
long some_function(); /* This is a function declaration, so the compiler can know the name and return type of this function. */
/* int */ other_function(); /* Another function declaration. Because this is an early version of C, there is an implicit 'int' type here. A comment shows where the explicit 'int' type specifier would be required in later versions. */
/* int */ calling_function() /* This is a function definition, including the body of the code following in the { curly brackets }. Because no return type is specified, the function implicitly returns an 'int' in this early version of C. */
{
long test1;
register /* int */ test2; /* Again, note that 'int' is not required here. The 'int' type specifier */
/* in the comment would be required in later versions of C. */
/* The 'register' keyword indicates to the compiler that this variable should */
/* ideally be stored in a register as opposed to within the stack frame. */
test1 = some_function();
if (test1 > 1)
test2 = 0;
else
test2 = other_function();
return test2;
}
इस प्रारूप में विनिर्देशक जो टिप्पणी की गई हैं उन्हें के और R C में छोड़ा जा सकता है, किन्तु बाद के स्टैंडर्डों में आवश्यक हैं।
चूंकि K और R C फ़ंक्शन घोषणा ओं में फ़ंक्शन तर्कों के बारे में कोई जानकारी सम्मलित नहीं थी, फ़ंक्शन पैरामीटर प्रकार की जांच नहीं की गई थी, चूंकि कुछ संकलक चेतावनी संदेश प्रस्तुत करेंगे यदि किसी स्थानीय फ़ंक्शन को तर्कों की गलत संख्या के साथ बुलाया गया था, या यदि बाहरी फ़ंक्शन पर कॉल विभिन्न संख्याओं या प्रकार के तर्कों का उपयोग किया। यूनिक्स की लिंट प्रोग्रामिंग उपकरण उपयोगिता जैसे अलग उपकरण विकसित किए गए थे जो अन्य बातों के अतिरिक्त कई स्रोत फ़ाइलों में फ़ंक्शन उपयोग की निरंतरता की जांच कर सकते थे।
K और R C के प्रकाशन के बाद के वर्षों में, AT और T विशेष रूप से सुवाहय़ C के संकलक द्वारा समर्थित भाषा में कई विशेषताएं जोड़ी गईं।[19] और कुछ अन्य विक्रेता इनमें सम्मलित हैं:
void
कार्य अर्थात, अतिरिक्त वापसी मूल्य वाले कार्य- फ़ंक्शन लौट रहा है
struC t
याunion
प्रकार पहले केवल सूचक, पूर्णांक या फ्लोट लौटाया जा सकता था - कार्यभार कंप्यूटर विज्ञान के लिए
struct
डेटा के प्रकार - प्रगणित प्रकार पहले, पूर्णांक निश्चित मानों के लिए पूर्वप्रक्रमक परिभाषाएँ उपयोग की जाती थीं, उदा
#define GREEN 3
)
C स्टैंडर्ड लाइब्रेरी पर बड़ी संख्या में विस्तार और समझौते की कमी, साथ में भाषा की लोकप्रियता और तथ्य यह है कि यूनिक्स संकलनकर्ता ने भी K और R C विनिर्देशन को त्रुटिहीन रूप से लागू नहीं किया, जिससे स्टैंडर्डीकरण की आवश्यकता हुई।
ANSI C और ISO C
1970 और 1980 के दशक के अंत में, IBM PC सहित विभिन्न प्रकार के मेनफ़्रेम कंप्यूटर, मिनी कंप्यूटर और माइक्रो कंप्यूटर के लिए C के संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में अधिक वृद्धि होने लगी थी।
1983 में, अमेरिकी राष्ट्रीय स्टैंडर्ड संस्थान (ANSI) ने यूनिक्स कार्यान्वयन पर C स्टैंडर्ड के आधार पर C . X3J11 के स्टैंडर्ड विनिर्देश स्थापित करने के लिए समिति, X3J11 का गठन किया चूंकि, यूनिक्स C लाइब्रेरी के अ-सुवाहय़ भाग को 1988 के POSIX स्टैंडर्ड का आधार बनने के लिए इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल और इलेक्ट्रॉनिक्स इंजीनियर्स कार्यरत समूह 1003 को सौंप दिया गया था। 1989 में,C स्टैंडर्ड को ANSI X3.159-1989 प्रोग्रामिंग भाषाC के रूप में अनुमोदित किया गया था। भाषा के इस संस्करण को अधिकांशतः ANSI C , स्टैंडर्ड C , या कभी-कभी C 89 के रूप में संदर्भित किया जाता है।
1990 में, ANSIC स्टैंडर्ड स्वरूपण परिवर्तनों के साथ को अंतर्राष्ट्रीय स्टैंडर्डीकरण संगठन (ISO) द्वारा ISO/IEC 9899:1990 के रूप में अपनाया गया था, जिसे कभी-कभी C 90 कहा जाता है। इसलिए, C 89 और C 90 शब्द ही प्रोग्रामिंग भाषा को संदर्भित करते हैं।
ANSI, अन्य राष्ट्रीय स्टैंडर्ड निकायों की प्रकार , अब C स्टैंडर्ड को स्वतंत्र रूप से विकसित नहीं करता है, किन्तु कार्य समूह ISO/IEC JTC 1/SC 22/WG14 द्वारा बनाए गए अंतर्राष्ट्रीय C स्टैंडर्ड को टाल देता है। अंतरराष्ट्रीय स्टैंडर्ड के लिए अद्यतन का राष्ट्रीय अंगीकरण सामान्यतः ISO प्रकाशन के वर्ष के भीतर होता है।
C स्टैंडर्डीकरण प्रक्रिया के उद्देश्यों में से K और R C C के उत्तम चयन का निर्माण करना था, जिसमें बाद में प्रारंभ की गई अनौपचारिक सुविधाओं में से कई सम्मलित थे। स्टैंडर्ड समिति में कई अतिरिक्त सुविधाएँ भी सम्मलित हैं जैसे कि फ़ंक्शन प्रोटोप्ररूप C ++ से उद्धृत लिया गया , void
सूचक , अंतर्राष्ट्रीय वर्ण कूट लेखन और स्थान कंप्यूटर सॉफ़्टवेयर और पूर्वप्रक्रमक वृद्धि के लिए समर्थन। चूंकि पैरामीटर घोषणा ओं के लिए C वाक्य-विन्यास को C ++ में उपयोगी की जाने वाली शैली को सम्मलित करने के लिए संवर्धित किया गया था, उपस्तिथा स्रोत संकेत के साथ संगतता के लिए K और R C अंतराफलक की अनुमति प्रस्तुत रही हैं।
C 89 वर्तमानC संकलक द्वारा समर्थित है, और अधिकांश आधुनिक C संकेत इस पर आधारित है। कोई भी प्रोग्राम केवल स्टैंडर्ड C में लिखा गया है और अतिरिक्त किसी हार्डवेयर-निर्भर धारणा के किसी भी कम्प्यूटिंग मंच पर अनुरूप C कार्यान्वयन के साथ, इसकी संसाधन सीमा के भीतर सही ढंग से चलेगा। ऐसी सावधानियों के अतिरिक्त , प्रोग्राम केवल निश्चित प्लेटफॉर्म पर या किसी विशेष संकलक के साथ संकलित हो सकते हैं, उदाहरण के लिए, A-स्टैंडर्ड लाइब्रेरी के उपयोग के लिए जैसे कि ग्राफिकल उपयोगकर्ता अंतराफलक लाइब्रेरी, या संकलक - या प्लेटफॉर्म-विशिष्ट पर निर्भरता विशेषताएँ जैसे कि डेटा प्रकारों का त्रुटिहीन आकार और बाइट अंत में किया जाता हैं।
ऐसे स्थितियों में जहां संकेत को स्टैंडर्ड-अनुरूप K और R C आधारित संकलनकर्ता द्वारा संकलित किया जाना चाहिए, __STDC __
केवल स्टैंडर्ड C में उपलब्ध सुविधाओं के K और R C आधारित संकलक पर उपयोग को रोकने के लिए मैक्रो का उपयोग स्टैंडर्ड और K और R C वर्गों में संकेत को विभाजित करने के लिए किया जा सकता है।
ANSI/ISO स्टैंडर्डीकरण प्रक्रिया के बाद,सी भाषा विनिर्देश कई वर्षों तक अपेक्षाकृत स्थिर रहा। 1995 में, 1990C स्टैंडर्ड ISO/IEC 9899/AMD1:1995, अनौपचारिक रूप से C 95 के रूप में जाना जाता है स्टैंडर्ड संशोधन के लिए 1 प्रकाशित किया गया था, कुछ विवरणों को सही करने और अंतर्राष्ट्रीय चरित्र सेटों के लिए अधिक व्यापक समर्थन जोड़ने के लिए।[20]
अपार्टमेंट
1990 के दशक के अंत में C स्टैंडर्ड को और संशोधित किया गया, जिससे 1999 में ISO/IEC 9899:1999 का प्रकाशन हुआ, जिसे सामान्यतः C 99 कहा जाता है। तब से इसे तकनीकी शुद्धिपत्र द्वारा तीन बार संशोधित किया गया है।[21]C 99 ने कई नई सुविधाएँ प्रस्तुत कीं, जिनमें इनपंक्ति फ़ंक्शन, कई नए डेटा प्रकार (सहित long long int
और A Complex
जटिल संख्याओं का प्रतिनिधित्व करने के लिए प्ररूप करें), चर-लंबाई सरणी यों और लचीले सरणी सदस्यों, IEEE 754 तैरनेवाला स्थल के लिए श्रेष्ठतर समर्थन, वैरिएडिक मैक्रोज़ के लिए समर्थन चर के मैक्रोज़ और -पंक्ति टिप्पणियों के साथ प्रारंभ होने के लिए समर्थन //
, जैसे BCPL या C++ में। इनमें से कई पहले से ही कई C संकलनकर्ता रूप में लागू किए गए थे।
C 99 अधिकांश भाग के लिए C 90 के साथ संगत है, किन्तु कुछ मायनों में दृढ़ है विशेष रूप से, घोषणा जिसमें प्रकार के विनिर्देशक का अभाव है, अब नहीं है int
परोक्ष रूप से मान लिया। स्टैंडर्ड मैक्रो __STDC _VERSION__
मान से परिभाषित किया गया है 199901L
यह इंगित करने के लिए कि C 99 समर्थन उपलब्ध है। GNU संकलक संग्रह, सन स्टूडियो (सॉफ्टवेयर), और अन्यC संकलक अब C 99 की कई या सभी नई सुविधाओं का समर्थन करें। माइक्रोसाफ्ट विजुअल C ++ मेंC संकलक , चूँकि, C 89 स्टैंडर्ड और C 99 के उन हिस्सों को लागू करता है जो C ++11 के साथ संगतता के लिए आवश्यक हैं।[22] इसके अतिरिक्त, स्टैंडर्ड बचने वाले पात्रों के रूप में यूनिसंकेत पहचानकर्ताओं चर/फ़ंक्शन नाम के लिए समर्थन की आवश्यकता है (उदाहरण। \U0001f431
) और अपरिष्कृत यूनिसंकेत नामों के लिए समर्थन का सुझाव देता है।
C 11
2007 में,C स्टैंडर्ड और संशोधन पर कार्य प्रारंभ हुआ, जिसे अनौपचारिक रूप से C 1X कहा जाता है। जब तक कि 2011-12-08 को ISO/IEC 9899:2011 का आधिकारिक प्रकाशन नहीं हो गया।C स्टैंडर्ड समिति ने उन नई विशेषताओं को अपनाने की सीमा तय करने के लिए दिशा-निर्देशों को अपनाया जिनका उपस्तिथा कार्यान्वयनों द्वारा परीक्षण नहीं किया गया था।
C 11 स्टैंडर्डC और लाइब्रेरी में कई नई सुविधाएँ जोड़ता है, जिसमें प्ररूप जेनेरिक मैक्रोज़, अनाम संरचनाएँ, श्रेष्ठतर यूनिसंकेत समर्थन, परमाणु संचालन, बहु- थ्रेडिंग और सीमा-जांच कार्य सम्मलित हैं। यह उपस्तिथा C 99 लाइब्रेरी के कुछ अंशों को वैकल्पिक भी बनाता है और C ++ के साथ संगतता में सुधार करता है। स्टैंडर्ड मैक्रो __STDC _VERSION__
की प्रकार परिभाषित किया गया है 201112L
यह इंगित करने के लिए कि C 11 समर्थन उपलब्ध है।
C17
जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C 17 सी प्रोग्रामिंग भाषा के लिए वर्तमान स्टैंडर्ड है। यह C 11 में दोषों के लिए कोई नई भाषा सुविधाएँ केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। स्टैंडर्ड मैक्रो __STDC _VERSION__
की प्रकार परिभाषित किया गया है 201710L
.
C2
C 2x अगले C 17 के बाद प्रमुख सी भाषा स्टैंडर्ड संशोधन के लिए अनौपचारिक नाम है। इसके 2023 में मतदान होने की उम्मीद है और इसलिए इसे C 23 कहा जाएगा।[23]
अंतर्निहित C
ऐतिहासिक रूप से, अंतर्निहित सी प्रोग्रामिंग को सी भाषा के लिए अ-स्टैंडर्ड की आवश्यकता होती है जिससे कि नियत बिन्दु अंकगणित, कई अलग-अलग मेमोरी बैंक और आधारभूत I/O संचालन जैसी विदेशी विशेषताओं का समर्थन किया जा सके।
2008 में,C स्टैंडर्ड समिति नेसी भाषा का विस्तार करते हुए तकनीकी रिपोर्ट प्रकाशित की[24] पालन करने के लिए सभी कार्यान्वयन के लिए सामान्य स्टैंडर्ड प्रदान करके इन मुद्दों को हल करने के लिए इसमें कई विशेषताएं सम्मलित हैं जो सामान्य C में उपलब्ध नहीं हैं, जैसे निश्चित-बिंदु अंकगणित, नामित पता स्थान और मूल I/O हार्डवेयर एड्रेसिंग।
सिंटेक्स
C मेंC स्टैंडर्ड द्वारा निर्दिष्ट औपचारिक व्याकरण है।[25] रेखा के अंत सामान्यतःC में महत्वपूर्ण नहीं होते हैं चूँकि, पूर्वप्रक्रमण चरण के पर्यन्त पंक्ति सीमाओं का महत्व होता है। टिप्पणियाँ या तो सीमांकक के बीच दिखाई दे सकती हैं /*
तथा */
, या (C 99 के बाद से) निम्नलिखित //
पंक्ति के अंत तक द्वारा सीमांकित टिप्पणियाँ /*
तथा */
घोंसला न करें, और वर्णों के इन अनुक्रमों को टिप्पणी सीमांकक के रूप में व्याख्या नहीं किया जाता है यदि वे स्ट्रिंग शाब्दिक या वर्ण शाब्दिक के अंदर दिखाई देते हैं।[26]C स्रोत फ़ाइलों में घोषणाएँ और फ़ंक्शन परिभाषाएँ होती हैं। फ़ंक्शन परिभाषाएँ, बदले में, घोषणाएँ और कथन (कंप्यूटर विज्ञान) सम्मलित करती हैं। घोषणाएँ या तो कीवर्ड का उपयोग करके नए प्रकारों को परिभाषित करती हैं जैसे struct
, union
, तथा enum
, या प्ररूप निर्धारण करें और संभवतः नए चर के लिए भंडारण आरक्षित करें, सामान्यतः चरनाम के बाद प्ररूप लिखकर। कीवर्ड जैसे Char
तथा int
अंतर्निहित प्रकार निर्दिष्ट करें। संकेत के अनुभाग कोष्ठकों में संलग्न हैं ({
तथा }
, कभी-कभी घुंघराले ब्रैकेट कहा जाता है। घोषणा ओं के सीमाको सीमित करने और नियंत्रण संरचनाओं के लिए ल कथन के रूप में कार्य करने के लिए हैं।
अनिवार्य भाषा के रूप में,C क्रियाओं को निर्दिष्ट करने के लिए कथनों का उपयोग करता है। सबसे साधारण विवरण अभिव्यक्ति विवरण है, जिसमें मूल्यांकन की जाने वाली अभिव्यक्ति सम्मलित है। जिसके बाद अर्धविराम होता है मूल्यांकन के पार्श्व प्रभाव (कंप्यूटर विज्ञान) के रूप में, कार्य प्रक्रिया कॉल हो सकते हैं और चर कार्यभार कंप्यूटर विज्ञान नए मान हो सकते हैं। विवरणों के सामान्य अनुक्रमिक निष्पादन को संशोधित करने के लिए, C आरक्षित खोज शब्दों द्वारा पहचाने जाने वाले कई नियंत्रण-प्रवाह विवरण प्रदान करता है। संरचित प्रोग्रामिंग द्वारा समर्थित है if
... [else
] प्रतिबंधात्मक निष्पादन और द्वारा do
... while
, while
, तथा for
पुनरावृत्त निष्पादन (लूपिंग)। for
e> विवरण में अलग-अलग आरंभीकरण , टेस्टिंग और आरंभीकरण हैं, जिनमें से कोई भी या सभी को छोड़ा जा सकता है। break
तथा Continue
अंतरतम संलग्न लूप विवरण को छोड़ने के लिए उपयोगी किया जा सकता है या इसके पुनर्संरचना पर जा सकता है। अ-संरचित भी है goto
विवरण जो फ़ंक्शन के भीतर सीधे निर्दिष्ट लेबल (कंप्यूटर विज्ञान) को शाखा करता है। switch
A का चयन करता है Case
पूर्णांक अभिव्यक्ति के मूल्य के आधार पर निष्पादित किया जाना है।
भाव विभिन्न प्रकार के अंतर्निर्मित ऑपरेटरों का उपयोग कर सकते हैं और इसमें फ़ंक्शन कॉल हो सकते हैं। वह क्रम जिसमें अधिकांश ऑपरेटरों के लिए फ़ंक्शन और ऑपरेंड के तर्कों का मूल्यांकन किया जाता है, अनिर्दिष्ट है। मूल्यांकनों को आपस में जोड़ा भी जा सकता है। चूंकि, सभी दुष्प्रभाव भंडारण से चर सहित अगले अनुक्रम बिंदु से पहले होंगे अनुक्रम बिंदुओं में प्रत्येक अभिव्यक्ति कथन का अंत, और प्रत्येक फ़ंक्शन कॉल में प्रवेश और वापसी सम्मलित है। कुछ ऑपरेटरों वाले भावों के मूल्यांकन के पर्यन्त अनुक्रम बिंदु भी होते हैं (&&
, ||
, ?:
और अल्पविराम ऑपरेटर। यह संकलक द्वारा उच्च स्तर के प्रयोजन संकेत अनुकूलन की अनुमति देता है, किन्तु C प्रोग्राम को अन्य प्रोग्रामिंग भाषाओं की तुलना में विश्वसनीय परिणाम प्राप्त करने के लिए अधिक ध्यान देने की आवश्यकता होती है।
कर्निघन और रिची सी प्रोग्रामिंग भाषा के परिचय में कहते हैं, C, किसी भी अन्य भाषा की प्रकार इसके दोष हैं। कुछ ऑपरेटरों की गलत प्राथमिकता है वाक्य-विन्यास के कुछ भाग श्रेष्ठतर हो सकते हैं।[27] पहले से उपस्तिथ सॉफ़्टवेयर पर ऐसे परिवर्तनों के प्रभाव के कारण C स्टैंडर्ड ने इनमें से कई दोषों को ठीक करने का प्रयास नहीं किया।
अक्षर समुच्चय
मूल C स्रोत वर्ण चयन में निम्नलिखित वर्ण सम्मलित हैं:
- ISO मूलभूत लैटिन वर्णमाला के छोटे और बड़े अक्षर:
a
–z
A
–Z
- दशमलव अंक:
0
–9
- ग्राफिक वर्ण:
! " # % & ' ( ) * + , - . / : < = > ? [ \ ] ^ _ { | } ~
- व्हॉट्सएप कैरेक्टर: स्पेस (विराम चिह्न), टैब वर्ण, टैब कैरेक्टर, पृष्ठ विराम, नई पंक्ति
नई पंक्ति विवरण पंक्ति के अंत को इंगित करता है यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिए C इसे के रूप में मानता है।
अतिरिक्त बहु-बाइट एन्कोडेड वर्ण स्ट्रिंग अक्षर में उपयोग किए जा सकते हैं, किन्तु वे पूरी प्रकार से सॉफ़्टवेयर सुवाह्यता नहीं हैं। नवीनतम C स्टैंडर्ड C11, C स्टैंडर्ड संशोधन बहु-राष्ट्रीय यूनिसंकेत वर्णों को उपयोग करके C स्रोत पाठ के भीतर आंशिक रूप से लागू करने की अनुमति देता है \uXXXX
या \UXXXXXXXX
कूट लेखन जहां X
हेक्साडेसिमल चरित्र को दर्शाता है, चूंकि यह सुविधा अभी तक व्यापक रूप से लागू नहीं हुई है।
मूल C निष्पादन चरित्र चयन में बेल चरित्र, Backspace और कैरिज वापसी के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। चलाने का समय प्रोग्राम जीवनचक्र चरण | C स्टैंडर्ड के प्रत्येक संशोधन के साथ विस्तारित वर्ण चयन के लिए क्रम समर्थन बढ़ गया है।
आरक्षित शब्द
C 89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अतिरिक्त किसी अन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं:
auto
C 99 ने पांच और शब्द आरक्षित किए:
*_bool
C 11 ने सात और शब्द आरक्षित किए:[28]
*_Alignas
_Alignof
_atom
_normal
_no return
- _static_assert
_caste_local
जल्दी में आरक्षित अधिकांश शब्द अंडरस्कोर( _ ) के साथ प्रारंभ होते हैं, जिसके बाद बड़ा अक्षर होता है, क्योंकि उस फॉर्म के पहचानकर्ता पहले C मानक द्वारा केवल कार्यान्वयन के उपयोग के लिए आरक्षित थे। चूंकि उपस्तिथा प्रोग्राम स्रोत संकेत को इन पहचानकर्ताओं का उपयोग नहीं करना चाहिए था, यह तब प्रभावित नहीं होगा जब C कार्यान्वयन प्रोग्रामिंग भाषा में इनका समर्थन करना प्रारंभ कर दें। कुछ मानक शीर्षलेख अंडरस्कोर किए गए पहचानकर्ताओं के लिए अधिक सुविधाजनक समानार्थक शब्द परिभाषित करते हैं। भाषा में पहले आरक्षित शब्द सम्मलित था जिसे कहा जाता था
entry
, किन्तुयह संभवतः ही कभी लागू किया गया था, और अब है आरक्षित शब्द के रूप में हटा दिया गया है।[29]
ऑपरेटर
C ऑपरेटर (कंप्यूटर प्रोग्रामिंग) के समृद्ध चयन का समर्थन करता है, जो उस अभिव्यक्ति का मूल्यांकन करते समय किए जाने वाले कार्यसाधन को निर्दिष्ट करने के लिए अभिव्यक्ति (कंप्यूटर विज्ञान) के भीतर उपयोग किए जाने वाले प्रतीक हैं। C के लिए ऑपरेटर हैं:
- अंकगणित: जोड़|
+
, घटाव |-
, गुणन |*
, विभाजन (गणित)|/
, मोडुलो ऑपरेशन |%
* कार्यभार (कंप्यूटर विज्ञान):=
- संवर्धित कार्यभार:
- बिटवाइज़ ऑपरेशन:
~
,&
,|
,^
- अंश शिफ्ट:
<<
,>>
- बूलियन बीजगणित:
!
,&&
,||
- ?:: ?:|
? :
* समानता परीक्षण: समानता (गणित) |==
, असमानता (गणित)|!=
* उप-दैनिकि:( )
- वृद्धि और कमी ऑपरेटर:
++
,--
- अभिलेख (कंप्यूटर विज्ञान):
.
,->
- वस्तु का आकार:
sizeof
- आदेश सिद्धांत:
<
,<=
,>
,>=
- सूचक (कंप्यूटर प्रोग्रामिंग):
&
,*
,[ ]
- अनुक्रमण : कॉमा ऑपरेटर|
,
* संचालन का क्रम # प्रोग्रामिंग भाषाएँ:( )
- प्रकार रूपांतरण:
(typename)
C ऑपरेटर का उपयोग करता है
=
गणित में समानता व्यक्त करने के लिए प्रयोग किया जाता है। फोरट्रान और PL/I के उदाहरण के बाद, कार्यभार को इंगित करने के लिए, किन्तुएएलजीओएल और इसके डेरिवेटिव के विपरीत C ऑपरेटर का उपयोग करता है।==
समानता के लिए परीक्षण करने के लिए। इन दो ऑपरेटरों कार्यभार और समानता के बीच समानता के परिणामस्वरूप दूसरे के स्थान पर का आकस्मिक उपयोग हो सकता है और कई स्थितियों में गलती त्रुटि संदेश उत्पन्न नहीं करती है, चूंकि कुछ संकलक चेतावनियां उत्पन्न करते हैं। उदाहरण के लिए, प्रतिबंधात्मक अभिव्यक्तिif (a == b + 1)
गलती से लिखा जा सकता हैif (a = b + 1)
, जिसका मूल्यांकन सत्य के रूप में किया जाएगा यदिa
कार्यभार के बाद शून्य नहीं है।[30]संचालन का C क्रम सदैव सहज नहीं होता है। उदाहरण के लिए, ऑपरेटर==
ऑपरेटरों की तुलना में अधिक कसकर बांधता है पहले निष्पादित किया गया है।&
(बिटवाइज ) और|
(बिटवाइज़) जैसे भावों मेंx & 1 == 0
, जिसे इस रूप में लिखा जाना चाहिए(x & 1) == 0
यदि वह कोडर का प्रयोजन है।[31]
डेटा प्रकार
C में प्ररूप प्रणाली स्थिर प्ररूप और कमजोर प्ररूप है, जो इसे पास्कल (प्रोग्रामिंग भाषा) जैसे ऐल्गॉल वंशजों के प्ररूप प्रणाली के समान बनाता है।[32] विभिन्न आकारों के पूर्णांकों के लिए अंतर्निहित प्रकार हैं, दोनों हस्ताक्षरित और अहस्ताक्षरित चल बिन्दु संख्या संख्याएँ, और प्रगणित प्रकार (
enum
). पूर्णांक प्रकारChar
अधिकांशतः एकल-बाइट वर्णों के लिए प्रयोग किया जाता है। C 99 ने बूलियन डेटाप्ररूप जोड़ा। सरणी डेटा प्रकार, सूचक(कंप्यूटर प्रोग्रामिंग), अभिलेख (कंप्यूटर विज्ञान) सहित व्युत्पन्न प्रकार भी हैं (struct
), और संघ (कंप्यूटर विज्ञान) (union
).
C का उपयोग अधिकांशतः निम्न-स्तरीय प्रणाली प्रोग्रामिंग में किया जाता है, जहाँ प्ररूप प्रणाली से बचना आवश्यक हो सकता है। संकलक अधिकांश प्रकार की शुद्धता सुनिश्चित करने का प्रयास करता है, किन्तु प्रोग्रामर विभिन्न तरीकों से चेक को अवहेलना कर सकता है, तो दूसरे प्रकार से मूल्य को स्पष्ट रूप से रूपांतरित करने के लिए सूचक या यूनियनों का उपयोग करके अंतर्निहित बिट्स की पुनर्व्याख्या करने के लिए डेटा प्रयोजन का किसी अन्य विधि से हैं।कुछ लोगC के घोषणा वाक्य-विन्यास को विशेष रूप से फंक्शन सूचक के लिए अनपेक्षित पाते हैं। रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था , घोषणा उपयोग को दर्शाती है।[33] C के सामान्य अंकगणितीय रूपांतरण कुशल संकेत उत्पन्न करने की अनुमति देते हैं, किन्तु कभी-कभी अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए, समान चौड़ाई के हस्ताक्षरित और अहस्ताक्षरित पूर्णांकों की तुलना के लिए हस्ताक्षरित मान को अहस्ताक्षरित में बदलने की आवश्यकता होती है। यदि हस्ताक्षरित मान ऋणात्मक है तो यह अनपेक्षित परिणाम उत्पन्न कर सकता है।
सूचक
C सूचक कंप्यूटर प्रोग्रामिंग के उपयोग का समर्थन करता है, संदर्भ (कंप्यूटर विज्ञान) का प्रकार जो मेमोरी में किसी प्रयोजन या फ़ंक्शन का पता या स्थान अभिलेख करता है। सूचक को इंगित किए गए पते पर संग्रहीत डेटा तक पहुंचने के लिए या आह्वान करने के लिए संदर्भित किया जा सकता है। कार्यभार या सूचकअंकगणित का उपयोग करके सूचक में कार्यसाधन किया जा सकता है। सूचकमान का क्रम प्रतिनिधित्व सामान्यतः कच्चा मेमोरी पता होता है संभवतः शब्द क्षेत्र में ऑफचयन द्वारा संवर्धित, किन्तु चूंकि सूचक के प्रकार में इंगित की गई वस्तु का प्रकार सम्मलित होता है, सूचक सहित प्ररूप-चेक किया जा सकता है संकलन समय पर सूचक अंकगणित स्वचालित रूप सेइंगित -डेटा प्रकार के आकार से स्तर किया जाता है।
C में कई उद्देश्यों के लिए सूचक का उपयोग किया जाता है। स्ट्रिंग कंप्यूटर विज्ञान को सामान्यतः वर्णों के सरणी यों में सूचक का उपयोग करके कार्य साधन किया जाता है। गतिशील मेमोरी आवंटन सूचक का उपयोग करके किया जाता है A का परिणाम
malloc
सामान्यतः संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे पेड़ (डेटा संरचना), सामान्यतः गतिशील रूप से आवंटित किए जाते हैंstruct
सूचक का उपयोग करके साथ जुड़ी हुई वस्तुएं। सूचक अन्य सूचक का उपयोग अधिकांशतः बहु-आयामी सरणी यों और सरणी यों में किया जाता हैstruct
वस्तुओं। फ़ंक्शन के सूचक (फ़ंक्शन सूचक ) प्रेषण तालिका में उच्च-क्रम फ़ंक्शन (जैसे क्यूसॉर्ट या Bखोज ) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या कॉलबैक (कंप्यूटर विज्ञान) के रूप में Event_(C omputing)#Event_handler ।[34]शून्य सूचक मान स्पष्ट रूप से किसी मान्य स्थान की ओर संकेत नहीं करता है। अशक्त सूचक मान को अपरिभाषित करना अपरिभाषित है, जिसके परिणामस्वरूप अधिकांशतः विभाजन दोष होता है। अशक्त सूचक मान विशेष स्थितियोंको इंगित करने के लिए उपयोगी होते हैं जैसे कि संपर्क की गई सूची के अंतिम नोड में कोई अगला सूचक नहीं है, फ़ंक्शन वापसी सूचक से त्रुटि संकेत के रूप में। स्रोत संकेत में उपयुक्त संदर्भों में, जैसे कि सूचक चर को निर्दिष्ट करने के लिए, शून्य सूचक स्थिरांक को इस रूप में लिखा जा सकता है
0
, के साथ या सूचक प्रकार के लिए स्पष्ट कास्टिंग के अतिरिक्त रूप मेंNULL
कई मानक शीर्षलेखों द्वारा परिभाषित मैक्रो। प्रतिबंधात्मक संदर्भों में, अशक्त सूचक मान असत्य का मूल्यांकन करते हैं, चूँकि अन्य सभी सूचक मान सत्य का मूल्यांकन करते हैं।शून्य संकेतक (
void *
) अनिर्दिष्ट प्रकार की वस्तुओं को इंगित करता है और इसलिए सामान्य डेटा सूचक के रूप में उपयोग किया जा सकता है। चूँकि इंगित -प्रयोजन का आकार और प्रकार ज्ञात नहीं है, शून्य सूचक को भिन्नता नहीं किया जा सकता है, न ही उन पर सूचक अंकगणित की अनुमति है, चूँकि वे आसानी से और कई संदर्भों में निहित हैं किसी अन्य प्रयोजन सूचकसे परिवर्तित हो सकते हैं।[34]सूचक का लापरवाह उपयोग संभावित रूप से खतरनाक है। क्योंकि वे सामान्यतः अनियंत्रित होते हैं, किसी भी मनमाने स्थान को इंगित करने के लिए सूचक चर बनाया जा सकता है, जो अवांछनीय प्रभाव उत्पन्न कर सकता है। चूंकि उचित रूप से उपयोग किए गए सूचक सुरक्षित स्थानों की ओर संकेत करते हैं, उन्हें अमान्य सूचकअंकगणित का उपयोग करके असुरक्षित स्थानों की ओर संकेत किया जा सकता है वे जिन वस्तुओं की ओर संकेत करते हैं, वे विस्थापन (झूलने वाले संकेत) के बाद भी उपयोगी की जा सकती हैं उनका उपयोग आरंभ किए अतिरिक्त किया जा सकता है (वाइल्ड सूचक ) या उन्हें कास्ट, यूनियन, या किसी अन्य भ्रष्ट सूचक के माध्यम से सीधे असुरक्षित मान निर्धारण किया जा सकता है। सामान्यतः,C सूचक प्रकारों के बीच कार्यसाधन और रूपांतरण की अनुमति देने में अनुज्ञेय है, चूंकि संकलक सामान्यतः जाँच के विभिन्न स्तरों के लिए विकल्प प्रदान करते हैं। कुछ अन्य प्रोग्रामिंग भाषाएँ अधिक प्रतिबंधात्मक संदर्भ कंप्यूटर विज्ञान प्रकारों का उपयोग करके इन समस्याओं का समाधान करती हैं।
सरणीयाँ
C में सरणी डेटा प्रकार प्रकार परंपरागत रूप से संकलन समय पर निर्दिष्ट निश्चित, स्थिर आकार के होते हैं। अधिक C 99 मानक भी चर-लंबाई सरणी यों के रूप की अनुमति देता है। चूंकि, मानक पुस्तकालय का उपयोग करके, क्रम पर स्मृति का खंड मनमाने आकार का आवंटित करना भी संभव है
malloc
कार्य करें और इसे सरणी के रूप में मानें।चूंकि सरणी यों को सदैव सूचक के माध्यम से वास्तव में अभिगम किया जाता है, इसलिए सरणी अभिगम को सामान्यतः अंतर्निहित सरणी आकार के विरुद्ध चेक नहीं किया जाता है, चूंकि कुछ संकलक विकल्प के रूप में सीमा जाँच प्रदान कर सकते हैं।[35][36] इसलिए सरणी सीमा का उल्लंघन संभव है और अवैध मेमोरी अभिगम, डेटा का भ्रष्टाचार, अंतर्रोधी अधिकता और क्रम अपवाद सहित विभिन्न परिणाम का कारण बन सकता है।
C के पास बहु-आयामी सरणी यों को घोषित करने के लिए कोई विशेष प्रावधान नहीं है, जबकि सरणीयों को घोषित करने के लिए प्ररूप प्रणाली के भीतर रिकर्सन कंप्यूटर विज्ञान पर निर्भर करता है। जो प्रभावी रूप से ही वस्तु को पूरा करता है। परिणामी बहु-आयामी सरणी के सूचकांक मूल्यों को पंक्ति-प्रमुख क्रम में वृद्धि के रूप में माना जा सकता है। आव्यूह को स्टोर करने के लिए बहु-आयामी सरणी यों का उपयोग सामान्यतः संख्यात्मक कलन विधि मुख्य रूप से लागू रैखिक बीजगणित में किया जाता है। C सरणी की संरचना इस विशेष कार्य के लिए उपयुक्त है। चूंकि,C के प्रारंभिक संस्करणों में सरणी की सीमाओं को निश्चित मान ज्ञात होना चाहिए। अन्यथा किसी भी उप-दैनिकि को स्पष्ट रूप से पारित किया जाना चाहिए और गतिशील रूप से आकार के सरणीयों को दोहरा सूची का उपयोग करके अभिगम नहीं किया जा सकता है। इसके लिए आसपास कार्य करो सरणी को स्तंभ में सूचक के अतिरिक्त पंक्ति वेक्टर के साथ आवंटित करना था। C 99 ने चर-लंबाई सरणी यों को प्रस्तुत किया जो इस मुद्दे को संबोधित करते हैं।
आधुनिक C 99 बाद में का उपयोग करने वाला निम्न उदाहरण संचय पर द्वि-आयामी सरणी का आवंटन और अभिगम के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है जो कई C संकलनकर्ता पर सीमा-जांच का उपयोग कर सकता है। <वाक्यविन्यास प्रकाश लैंग = सी>इंट फंक (इंट एन, इंट एम){
int func(int N, int M)
{ float (*p)[N][M] = malloc(sizeof *p); if (!p) return -1; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) (*p)[i][j] = i + j; print_array(N, M, p); free(p); return 1;
}
और यहाँ C 99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है।<वाक्यविन्यास प्रकाश लैंग = सी> इंट फंक (इंट एन, इंट एम){ int func(int N, int M)
{ // Caution: checks should be made to ensure N*M*sizeof(float) does NOT exceed limitations for auto VLAs and is within available size of stack. float p[N][M]; // auto VLA is held on the stack, and sized when the function is invoked for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) p[i][j] = i + j; // no need to free(p) since it will disappear when the function exits, along with the rest of the stack frame return 1;
}
सरणी -सूचक विनिमेयता
सबस्क्रिप्ट अंकन
x[i]
(कहाँ पेx
सूचक को नामित करता है) के लिए सिंटैक्टिक चीनी है*(x+i)
.[37] सूचक प्रकार के संकलक के ज्ञान का लाभ उठाते हुए, वह पताx + i
आधार की ओर पता नहीं है।x
द्वारा इंगित किया गया है बढ़ाया गयाi
बाइट्स, जबकि इसके द्वारा बढ़ाए गए आधार पते के रूप में परिभाषित किया गया हैi
तत्व के आकार से गुणा करेंx
संकेत करना। इस प्रकार,x[i]
निर्दिष्ट करता हैi+1
सरणी का वें तत्व है।इसके अतिरिक्त, अधिकांश अभिव्यक्ति संदर्भों में उल्लेखनीय अपवाद के संकार्य के रूप में है
sizeof
, सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किसी फ़ंक्शन के तर्क के रूप में नामित होने पर किसी सरणी को पूरी प्रकार से प्रतिलिपि नहीं किया जाता है, जबकि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, किसी फ़ंक्शन में कॉल-टू-मूल्य से | पास-बाय-मूल्यशब्दार्थ का उपयोग करते हैं, सरणीयाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं।सरणी का कुल आकार
x
आवेदन करके निर्धारित किया जा सकता हैsizeof
सरणी प्रकार की अभिव्यक्ति के लिए। ऑपरेटर को लागू करके किसी तत्व का आकार निर्धारित किया जा सकता हैsizeof
किसी सरणी के किसी भी संदर्भित तत्व के लिएA
, जैसे कीn = sizeof A[0]
. इस प्रकार, घोषित सरणी में तत्वों की संख्याA
के रूप में निर्धारित किया जा सकता हैsizeof A / sizeof A[0]
. ध्यान दें, यदि केवल पहले तत्व के लिए संकेतक उपलब्ध है जैसा कि अधिकांशतःC संकेत में होता है क्योंकि ऊपर वर्णित स्वचालित रूपांतरण के कारण, सरणी के पूर्ण प्रकार और इसकी लंबाई के बारे में जानकारी खो जाती है।
स्मृति प्रबंधन
प्रोग्रामिंग भाषा के सबसे महत्वपूर्ण कार्यों में से कंप्यूटर मेमोरी और मेमोरी में संग्रहीत वस्तुओं के प्रबंधन के लिए सुविधाएं प्रदान करना है। C वस्तुओं के लिए स्मृति आवंटित करने के तीन प्रमुख विधि प्रदान करता है:[34]* स्थैतिक स्मृति आवंटन: संकलन-समय पर बाइनरी में वस्तु के लिए स्थान प्रदान किया जाता है इन वस्तुओं में चर प्रोग्रामिंग विस्तारऔर सीमा आजीवन होती है जब तक कि बाइनरी जिसमें उन्हें मेमोरी में लोड किया जाता है।
- स्वचालित मेमोरी आवंटन अस्थायी वस्तुओं को कॉल स्टैक पर संग्रहीत किया जा सकता है और यह स्थान स्वचालित रूप से मुक्त हो जाता है और जिस खंड में उन्हें घोषित किया जाता है, उसके बाहर निकलने के बाद पुन: उपयोग किया जाता है।
- गतिशील मेमोरी आवंटन: मनमाना आकार की मेमोरी के खंड को पुस्तकालय फ़ंक्शन जैसे क्रम पर अनुरोध किया जा सकता है
malloC
स्मृति के क्षेत्र से गतिशील स्मृति आवंटन कहा जाता है ये खंड तब तक बने रहते हैं जब तक कि पुस्तकालय फ़ंक्शन को कॉल करके पुन: उपयोग के लिए मुक्त नहीं कर दिया जाताrealloC
याfree
ये तीन दृष्टिकोण विभिन्न स्थितियों में उपयुक्त हैं और विभिन्न व्यापार-बंद हैं। उदाहरण के लिए, स्थिर मेमोरी आवंटन में थोड़ा आवंटन उपरि होता है। स्वचालित आवंटन में थोड़ा अधिक उपरि सम्मलित हो सकता है और गतिशील मेमोरी आवंटन में आवंटन और विस्थापन दोनों के लिए संभावित रूप से बहुत अधिक उपरि हो सकता है। स्थैतिक वस्तुओं की निरंतर प्रकृति फ़ंक्शन कॉलों में राज्य की जानकारी को बनाए रखने के लिए उपयोगी होती है। स्वचालित आवंटन का उपयोग करना आसान होता है किन्तु, स्टैक स्पेस सामान्यतः स्थिर मेमोरी या संचय स्पेस की तुलना में बहुत अधिक सीमित और क्षणिक होता है, और गतिशील मेमोरी आवंटन उन वस्तुओं के सुविधाजनक आवंटन की अनुमति देता है। जिनके आकार केवल क्रम पर जाना जाता है। अधिकांशC प्रोग्राम तीनों का व्यापक उपयोग करते हैं।
जहां संभव हो स्वचालित या स्थैतिक आवंटन सामान्यतः सबसे सरल होता है क्योंकि भंडारण को संकलक द्वारा प्रबंधित किया जाता है, संभावित त्रुटि-प्रवण कोर के प्रोग्रामर को नियमावली रूप से आवंटित करने और भंडारण जारी करने से मुक्त करता है। चूंकि, क्रम पर कई डेटा संरचनाएं आकार में बदल सकती हैं। चूंकि स्थिर आवंटन और C 99 से पहले स्वचालित आवंटन का संकलन-समय पर निश्चित आकार होना चाहिए, ऐसी कई स्थितियां हैं जिनमें गतिशील आवंटन आवश्यक है।[34] C 99 मानक से पहले चर-आकार की सरणीयाँ इसका सामान्य उदाहरण थीं।
malloC
गतिशील रूप से आवंटित सरणी यों के उदाहरण के लिए स्वचालित आवंटन के विपरीत हैं। जो अनियंत्रित परिणामों के साथ चलाने का समय पर विफल हो सकता है, गतिशील आवंटन फ़ंक्शन संकेत देता हैं। शून्य सूचक मान के रूप में जब आवश्यक भंडारण आवंटित नहीं किया जा सकता है। स्थिर आवंटन जो बहुत बड़ा है, सामान्यतः लिंकर कंप्यूटिंग या लोडर (कंप्यूटिंग) द्वारा पता लगाया जाता है, इससे पहले कि कार्यक्रम भी निष्पादन प्रारंभ कर सके।जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, स्थिर वस्तुओं में प्रोग्राम प्रचलित होना पर शून्य सूचक मान होते हैं। स्वचालित रूप से और गतिशील रूप से आवंटित वस्तुओं को केवल तभी प्रारंभ किया जाता है जब प्रारंभिक मान स्पष्ट रूप से निर्दिष्ट किया गया हो अन्यथा उनके प्रारंभ में अनिश्चित मान होते हैं सामान्यतः, जो कुछ भी होता है वह कंप्यूटर भंडारण में उपस्तिथ होता है, जो उस प्रकार के लिए मान्य मान का प्रतिनिधित्व भी नहीं कर सकता है। यदि प्रोग्राम अ-प्रारंभिक मान तक पहुँचने का प्रयास करता है, तो परिणाम अपरिभाषित होते हैं। कई आधुनिक संकलक इस समस्या का पता लगाने और इसके बारे में चेतावनी देने का प्रयास करते हैं, किन्तु प्ररूप और प्ररूप दोनों त्रुटियाँ हो सकती हैं।
जितना संभव हो उतना पुन: उपयोग करने के लिए संचय मेमोरी आवंटन को किसी भी प्रोग्राम में इसके वास्तविक उपयोग के साथ सिंक्रनाइज़ करना होगा। उदाहरण के लिए, यदि ढेर मेमोरी आवंटन के लिए मात्र सूचक सीमा से बाहर हो जाता है। इसके मूल्य को स्पष्ट रूप से हटाए जाने से पहले अधिलेखित कर दिया जाता है, तो उस स्मृति रिसाव बाद में पुन: उपयोग के लिए पुनर्प्राप्त नहीं किया जा सकता है और अनिवार्य रूप से कार्यक्रम में खो जाता है। घटना जिसे स्मृति के रूप में जाना जाता है रिसना। इसके विपरीत, स्मृति को मुक्त करना संभव है, किन्तु बाद में संदर्भित किया जाता है, जिससे अप्रत्याशित परिणाम सामने आते हैं। सामान्यतः, विफलता के लक्षण प्रोग्राम के उस भाग में दिखाई देते हैं जो उस संकेत से संबंधित नहीं है जो त्रुटि का कारण बनता है, जिससे विफलता का निदान करना जटिल हो जाता है। कचरा संग्रह कंप्यूटर विज्ञान के साथ भाषाओं में इस प्रकार के मुद्दों में सुधार हुआ है।
पुस्तकालय
सी प्रोग्रामिंग भाषा पुस्तकालय कंप्यूटिंग को अपने विस्तार के प्राथमिक विधि के रूप में उपयोग करती है। C में, पुस्तकालय संग्रह फ़ाइल में निहित कार्यों का चयन है। प्रत्येक पुस्तकालय में सामान्यतः प्रवेशिका फाइल होती है, जिसमें पुस्तकालय के भीतर निहित फ़ंक्शन के प्रोटोप्ररूप होते हैं, जिनका उपयोग प्रोग्राम द्वारा किया जा सकता है, और इन फ़ंक्शन के साथ उपयोग किए जाने वाले विशेष डेटा प्रकारों और मैक्रो प्रतीकों की घोषणा करती है। पुस्तकालय का उपयोग करने के लिए प्रोग्राम के लिए, इसमें पुस्तकालय की प्रवेशिका फ़ाइल सम्मलित होनी चाहिए, और पुस्तकालय को प्रोग्राम से जोड़ा जाना चाहिए। जिसके लिए कई स्थितियों में संकलक ध्वज की आवश्यकता होती है उदाहरण के लिए,
-lm
, गणित पुस्तकालय को संपर्क करने के लिए आशुलिपि।[34]सबसे साधारण C मानक पुस्तकालय है, जो ISO मानक और ANSIC मानकों द्वारा निर्दिष्ट है और प्रत्येकC कार्यान्वयन के साथ आता है। कार्यान्वयन जो सीमित वातावरण जैसे कि अंतः स्थापित प्रणालियाँ को लक्षित करता है। मानक पुस्तकालय का केवल सबचयन प्रदान कर सकता है। यह पुस्तकालय प्रवाह इनपुट और आउटपुट, मेमोरी एलोकेशन, मैथमैटिक्स, कैरेक्टर स्ट्रिंग्स और समय मूल्य को समर्थन करती है। कई अलग-अलग मानक शीर्षलेख उदाहरण के लिए,
stdio.h
) इन और अन्य मानक पुस्तकालय सुविधाओं के लिए इंटरफेस निर्दिष्ट करें।C पुस्तकालय फ़ंक्शन का अन्य सामान्य चयन वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैसी प्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल संचालन प्रणाली को अंतराफलक प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और UNIX विशिष्टता में विस्तृत हैं।
चूँकि, किसी में कई कार्यक्रम लिखे गए हैं, इसलिए कई प्रकार के अन्य पुस्तकालय उपलब्ध हैं। पुस्तकालय अधिकांशतः C में लिखे जाते हैं क्यों किसी संकलक कुशल वस्तु संकेत उत्पन्न करते हैं प्रोग्रामर तब पुस्तकालय के लिए इंटरफेस बनाते हैं जिससे कि सामान्य उपयोग जावा प्रोग्रामिंग भाषा, मैक्तिक और पायथन प्रोग्रामिंग भाषा जैसी उच्च-स्तरीय भाषाओं से किया जा सके।[34]
फाइल संचालन और प्रवाह
फ़ाइल इनपुट और आउटपुट (I/O) स्वयं सी भाषा का भाग नहीं है, जबकि इसके अतिरिक्त पुस्तकालयों जैसे C मानक पुस्तकालय और उनसे जुड़ी प्रवेशिका फाइलें (उदाहरण।
stdio.h
). फ़ाइल संचालन सामान्यतः उच्च-स्तरीय I/O के माध्यम से कार्यान्वित की जाती है जो प्रवाह (कंप्यूटिंग) के माध्यम से कार्य करती है। धारा इस दृष्टिकोण से डेटा प्रवाह है जो उपकरणों से स्वतंत्र है, चूँकि फ़ाइल ठोस उपकरण है। उच्च-स्तरीय I/O प्रवाह को फ़ाइल से जोड़कर किया जाता है। C मानक पुस्तकालय में, डेटा अंतर्रोधी स्मृति क्षेत्र अस्थायी रूप से डेटा को अंतिम गंतव्य पर भेजे जाने से पहले संग्रहीत करने के लिए उपयोग किया जाता है। यह धीमे उपकरणों के लिए प्रतीक्षा करने में लगने वाले समय को कम करता है, उदाहरण के लिए हार्ड ड्राइव या ठोस राज्य ड्राइव निम्न-स्तरीय I/O फ़ंक्शन मानकC पुस्तकालय का भाग नहीं हैं किन्तु सामान्यतः नंगे धातु प्रोग्रामिंग का भाग होते हैं। प्रोग्रामिंग जो किसी भी संचालन प्रणाली से स्वतंत्र होती है जैसे अधिकांश अंतर्निहित प्रोग्रामिंग) कुछ अपवादों के साथ, कार्यान्वयन में निम्न-स्तरीय I/O सम्मलित हैं।
भाषा उपकरण
C प्रोग्रामरों को अपरिभाषित व्यवहार या संभवतः गलत अभिव्यक्तियों के साथ संकलक द्वारा प्रदान की गई तुलना में अधिक कठोरता के साथ विवरणों को खोजने और ठीक करने में सहायता करने के लिए कई उपकरण विकसित किए गए हैं। उपकरण लिंट (सॉफ्टवेयर) पहला ऐसा था, जो कई अन्य लोगों के लिए अग्रणी था।
स्वचालित स्रोत संकेत जाँच और अंकेक्षण किसी भी भाषा में लाभदायक होते हैं, और C के लिए ऐसे कई उपकरण उपस्तिथ हैं, जैसे लिंट (सॉफ़्टवेयर)। जब कोई प्रोग्राम पहली बार लिखा जाता है तो संदिग्ध संकेत का पता लगाने के लिए लिंट का उपयोग करना सामान्य अभ्यास है। बार जब कोई प्रोग्राम लिंट पास कर लेता है, तो उसे C संकलक का उपयोग करके संकलित किया जाता है। इसके अतिरिक्त, कई संकलक वैकल्पिक रूप से वाक्यात्मक रूप से मान्य निर्माणों के बारे में चेतावनी दे सकते हैं जो वास्तव में त्रुटियां होने की संभावना है। MISRAC अंतर्निहित प्रणाली के लिए विकसित ऐसे संदिग्ध संकेत से बचने के लिए दिशानिर्देशों का मालिकाना चयन है।[38] ऐसी संचालन करने के लिए संकलक, पुस्तकालय और संचालन प्रणाली स्तर तंत्र भी हैं जो C का मानक भाग नहीं हैं, जैसे कि सरणीयों के लिए सीमा जाँच, अंतर्रोधी पूर आना का पता लगाना, क्रमांकन, मेमोरी प्रबंधन देखना और कचरा संग्रह कंप्यूटर विज्ञान।
IBM तर्कसंगत शुद्धि या वेलग्रिंड जैसे उपकरण और Malloc के विशेष संस्करणों वाले पुस्तकालयों से संपर्क करने से मेमोरी उपयोग में क्रम त्रुटियों को अनावृत करने में सहायता मिल सकती है।
उपयोग
प्रणाली प्रोग्रामिंग में उपयोग के लिए तर्क
C संचालन प्रणाली और अंतर्निहित प्रणाली अनुप्रयोगों को लागू करने में प्रणाली प्रोग्रामिंग के लिए व्यापक रूप से उपयोग किया जाता है।[39] यह कई कारणों से है:
- संकलन के बाद उत्पन्न संकेत को कई क्रम प्रणाली की आवश्यकता नहीं होती है, और इसे कुछ बूट संकेत से सीधे विधि से लागू किया जा सकता है - इसे निष्पादित करना सरल है।
- सी भाषा के विवरण और भाव सामान्यतः लक्ष्य प्रोसेसर के लिए निर्देशों के अनुक्रम पर अच्छी प्रकार से मैप होते हैं और इसके परिणामस्वरूप कम चलाने का समय प्रोग्राम जीवनचक्र चरण होता है। प्रणाली संसाधनों पर क्रम की मांग - यह निष्पादित करने के लिए तेज़ है।
- ऑपरेटरों के अपने समृद्ध चयन के साथ, सी भाषा लक्षित CPU की कई विशेषताओं का उपयोग कर सकती है। जहां विशेष CPU में अधिक गूढ़ निर्देश होते हैं, उन निर्देशों का लाभ उठाने के लिए संभवतः आंतरिक कार्य के साथ भाषा संस्करण का निर्माण किया जा सकता है - यह व्यावहारिक रूप से सभी लक्ष्य CPU की विशेषताओं का उपयोग कर सकता है।
- भाषा बाइनरी डेटा के खंड पर संरचनाओं को उपरिशायी करना आसान बनाती है, जिससे डेटा को समझा जा सकता है। नेविगेट किया जा सकता है और संशोधित किया जा सकता है। - यह डेटा स्ट्रक्चर, यहां तक कि फाइल प्रणाली भी लिख सकता है।
- भाषा पूर्णांक अंकगणित और तर्क के लिए अंश कार्यसाधन सहित ऑपरेटरों के समृद्ध चयन का समर्थन करती है और संभवतः दशमलव संख्याएं के विभिन्न आकार - यह उचित रूप से संरचित डेटा को प्रभावी ढंग से संसाधित कर सकती है।
- C अधिक छोटी भाषा है, केवल कुछ मुट्ठी भर विवरणों के साथ और बहुत अधिक विशेषताओं के अतिरिक्त जो व्यापक लक्ष्य संकेत उत्पन्न करते हैं - यह समझ में आता है।
- C का मेमोरी आवंटन और विस्थापन पर सीधा नियंत्रण है, जो मेमोरी-संचालन ऑपरेशंस को उचित दक्षता और पूर्वानुमेय समय देता है, छिटपुट स्टॉप-द-वर्ल्ड कचरा संग्रह घटनाओं के लिए किसी भी चिंता के अतिरिक्त - इसका पूर्वानुमान योग्य प्रदर्शन है।
- प्लेटफ़ॉर्म हार्डवेयर को सूचक और प्ररूप पनिंग के साथ अभिगम किया जा सकता है, इसलिए प्रणाली-विशिष्ट विशेषताएं जैसे नियंत्रण / स्थिति रजिस्टर , मेमोरी-मैप्ड I/O|I/O रजिस्टर) को कॉन्फ़िगर किया जा सकता है। C में लिखे संकेत के साथ उपयोग किया जा सकता है - यह अच्छी प्रकार से परस्पर प्रभाव करता है जिस प्लेटफॉर्म पर यह चल रहा है।
- लिंकर और पर्यावरण के आधार पर,C संकेत सभा भाषा में लिखी गई पुस्तकालय को भी कॉल कर सकता है, और सभा भाषा से कॉल किया जा सकता है - यह अन्य निचले स्तर के संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है।
- C और इसके कॉलिंग सम्मेलनों और लिंकर संरचनाओं का उपयोग सामान्यतः अन्य उच्च-स्तरीय भाषाओं के संयोजन के साथ किया जाता है, जिसमेंC औरC दोनों से कॉल समर्थित हैं - यह अन्य उच्च-स्तरीय संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है।
- C के पास बहुत ही परिपक्व और व्यापक पारिस्थितिकी तंत्र है। जिसमें पुस्तकालय, फ्रेमवर्क, ओपन स्रोत संकलक , डिबगर्स और उपयोगिता ज सम्मलित हैं और यह वास्तविक मानक है। यह संभावना है कि ड्राइवर पहले से ही C में उपस्तिथ हैं,C संकलक के बैक-और के समान CPU स्थापत्य है, इसलिए दूसरी भाषा चुनने के लिए प्रोत्साहन कम है।
बार वेब विकास के लिए उपयोग किया जाता है
ऐतिहासिक रूप से C को कभी-कभी वेब एप्लिकेशन, सर्वर और ब्राउज़र के बीच सूचना के लिए गेटवे के रूप में कॉमन गेटवे अंतराफलक (C GI) का उपयोग करके वेब विकास के लिए उपयोग किया जाता था।[40]C को इसकी गति, स्थिरता और निकट-सार्वभौमिक उपलब्धता के कारण व्याख्या की गई भाषाओं पर चुना गया हो सकता है।[41]C में वेब विकास के लिए अब यह सामान्य अभ्यास नहीं है,[42] और कई अन्य वेब विकास उपकरण उपस्तिथ हैं।
=== कुछ अन्य भाषाएँ स्वयं C में लिखी गई हैं। C की व्यापक उपलब्धता और दक्षता का परिणाम यह है कि अन्य प्रोग्रामिंग भाषाओं के संकलक , पुस्तकालय और इंटरप्रेटर (कंप्यूटिंग) अधिकांशतःC में लागू होते हैं।[43] उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के संदर्भ कार्यान्वयन,[44] मैक्तिक,[45] रूबी (प्रोग्रामिंग भाषा),[46] और PHP[47]C में लिखे गए हैं।
कम्प्यूटेशनल-गहन पुस्तकालयों के लिए प्रयुक्त
C प्रोग्रामर को कलन विधि और डेटा संरचनाओं के कुशल कार्यान्वयन के लिए सक्षम बनाता है, क्योंकि हार्डवेयर से अमूर्तता की परत पतली है, और इसका उपरि कम है, कम्प्यूटेशनल रूप से गहन कार्यक्रमों के लिए महत्वपूर्ण मानदंड है। उदाहरण के लिए, GNU एकाधिक परिशुद्धता अंकगणितीय पुस्तकालय, GNU वैज्ञानिक पुस्तकालय, अंक शास्त्र और मतलब पूरी प्रकार या आंशिक रूप से C में लिखे गए हैं। कई भाषाएँ C में पुस्तकालय फ़ंक्शन को कॉल करने का समर्थन करती हैं, उदाहरण के लिए, Python (प्रोग्रामिंग भाषा)-आधारित फ्रेमवर्क NumPy उपयोग करता है C उच्च-प्रदर्शन और हार्डवेयर-इंटरैक्टिंग पहलुओं के लिए है ।
C मध्यवर्ती भाषा के रूप में
C को कभी-कभी अन्य भाषाओं के कार्यान्वयन द्वारा मध्यवर्ती भाषा के रूप में प्रयोग किया जाता है। सुवाह्यता या सुविधा के लिए इस दृष्टिकोण का उपयोग किया जा सकता है;C को मध्यवर्ती भाषा के रूप में उपयोग करके, अतिरिक्त मशीन-विशिष्ट संकेत जेनरेटर आवश्यक नहीं हैं।C में कुछ विशेषताएं हैं, जैसे कि लाइन-नंबर पूर्वप्रक्रमक निर्देश और प्रारंभकर्ता सूचियों के अंत में वैकल्पिक अतिरिक्त अल्पविराम, जो उत्पन्न संकेत के संकलन का समर्थन करते हैं। चूंकि,C की कुछ कमियों ने सी-परिवार प्रोग्रामिंग भाषाओं की अन्य सूची के विकास को प्रेरित किया है। सी-आधारित भाषाओं को विशेष रूप से मध्यवर्ती भाषाओं के रूप में उपयोग करने के लिए रचना किया गया है, जैसे C--। इसके अतिरिक्त, समकालीन प्रमुख संकलक GNU संकलक संग्रह और LLVM दोनों में मध्यवर्ती प्रतिनिधित्व है जोC नहीं है, और वे संकलक C सहित कई भाषाओं के लिए अग्रभाग का समर्थन करते हैं।
अंतिम-उपयोगकर्ता अनुप्रयोग
और -उपयोगकर्ता (कंप्यूटर विज्ञान) | अंतिम-उपयोगकर्ता अनुप्रयोग को लागू करने के लिए C का भी व्यापक रूप से उपयोग किया गया है। चूँकि, ऐसे अनुप्रयोग नई उच्च-स्तरीय भाषाओं में भी लिखे जा सकते हैं।
सीमाएं
चूँकि C लोकप्रिय, प्रभावशाली और अति सफल रहा है, इसमें कमियां सम्मलित हैं।
- K साथ मानक गतिशील स्मृति से निपटने
malloc
तथाfree
त्रुटि प्रवण है। बग में सम्मलित हैं: स्मृति आवंटित होने पर मेमोरी लीक होती है किन्तु मुक्त नहीं होती है और पहले से मुक्त स्मृति तक पहुंच।- सूचक के उपयोग और मेमोरी के प्रत्यक्ष कार्यसाधन का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, संभवतः प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण।
- कुछ प्रकार की जाँच होती है, किन्तु यह विविध कार्यों जैसे क्षेत्रों पर लागू नहीं होती है और प्रकार की जाँच तुच्छ या अनजाने में की जा सकती है।
- चूंकि संकलक द्वारा उत्पन्न संकेत में कुछ चेक ही होते हैं, प्रोग्रामर पर सभी संभावित परिणामों पर विचार करने का बोझ होता है, और अंतर्रोधी अधिवहित , सरणी सीमा जाँच , स्टैक अतिप्रवाह , मेमोरी थकावट, दौड़ की स्थिति, सूत्र एकांत आदि से बचाव होता है।
- सूचक का उपयोग और इनके क्रम कार्यसाधन का अर्थ है कि ही डेटा (अलियासिंग) तक पहुंचने के दो विधि हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं,C में संभव नहीं हैं। फोरट्रान को तेज माना जाता है।
- कुछ मानक पुस्तकालय कार्य, उदाहरण।
scan f
, अंतर्रोधी अधिवहित का कारण बन सकता है।- उत्पन्न संकेत में निम्न-स्तरीय प्रकार के समर्थन में सीमित मानकीकरण है, उदाहरण के लिए: अलग-अलग फ़ंक्शन कॉलिंग कन्वेंशन और अनुप्रयोग बाइनरी अंतराफलक विभिन्न संरचना परत सम्मेलन बड़े पूर्णांक सहित के भीतर अलग-अलग बाइट आदेश करना। कई भाषा कार्यान्वयनों में इनमें से कुछ विकल्पों को पूर्वप्रक्रमक निर्देश के साथ नियंत्रित किया जा सकता है
#pragma
,[48][49] और कुछ अतिरिक्त खोजशब्दों के साथ उदा. उपयोग__cdec l
कॉलिंग कन्वेंशन। किन्तु निर्देश और विकल्प लगातार समर्थित नहीं हैं।[50]- मानक पुस्तकालय का उपयोग कर C स्ट्रिंग संचालन कोड-गहन है, जिसमें स्पष्ट स्मृति प्रबंधन आवश्यक है।
- भाषा सीधे प्रयोजन अभिविन्यास , प्ररूप आत्मनिरीक्षण , क्रम मूल्यांकन , सामान्य आदि का समर्थन नहीं करती है।
- भाषा सुविधाओं के अनुचित उपयोग के विरुद्ध बहुत कम सुरक्षा उपाय हैं, जिसके कारण संकेत अनुरक्षणीय नहीं हो सकता है। मुश्किल संकेत के लिए यह सुविधा अंतर्राष्ट्रीय अस्पष्ट C संकेत प्रतियोगिता और गुप्त C प्रतियोगिता जैसी प्रतियोगिताओं के साथ मनाई गई है।
- C अपवाद संचालन के लिए मानक समर्थन की कमी है और केवल त्रुटि जांच के लिए वापसी संकेत प्रदान करता है। सेटजम्प.एच |
set jmp
तथाlongjmp
में मानक पुस्तकालय कार्यों का उपयोग किया गया है[51] मैक्रोज़ के माध्यम से कोशिश-पकड़ तंत्र को लागू करने के लिए।
कुछ उद्देश्यों के लिए,C की प्रतिबंधित शैलियों को अपनाया गया है, उदाहरण MISRAC या CERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। सामान्य कमजोरियों की गणना जैसे डेटाबेस C आदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए अनुशंसा भी करते हैं।
ऐसे भाषा उपकरण हैं जो कुछ कमियों को दूर कर सकते हैं। समकालीन C संकलनकर्ता में चेक सम्मलित हैं जो कई संभावित बगों की पहचान करने में सहायता के लिए चेतावनियां उत्पन्न कर सकते हैं।
इनमें से कुछ कमियों ने अन्य भाषाओं के निर्माण को प्रेरित किया है।
संबंधित भाषाएँ
C ने C++, स्पष्ट प्रोग्रामिंग भाषा C, D प्रोग्रामिंग भाषा, GO प्रोग्रामिंग भाषा, जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, मैक्तिक, PHP, रस्ट प्रोग्रामिंग जैसी कई बाद की भाषाओं को प्रत्यक्ष और अप्रत्यक्ष रूप से प्रभावित किया है। भाषा और यूनिक्स का C शेल।[53] सबसे व्यापक प्रभाव वाक्य-विन्यास रहा है। उल्लिखित सभी भाषाएं विवरण और अधिक या कम पहचानने योग्य अभिव्यक्तिC बेल्ट को प्ररूप प्रणाली, डेटा मॉडल बड़े पैमाने पर प्रोग्राम संरचनाओं के साथ जोड़ती हैं जो C से भिन्न होती हैं, कभी-कभी मूल रूप से होती हैं।
Ch (कंप्यूटर प्रोग्रामिंग) और C INT सहित कई C या निकट-C दुभाषिया उपस्तिथ हैं, जिनका उपयोग पटकथा के लिए भी किया जा सकता है।जब प्रयोजन -अभिविन्यस्त प्रोग्रामिंग भाषा लोकप्रिय हुईं, तो C ++ और प्रयोजन -C, C के दो अलग-अलग थे जो प्रयोजन -अभिविन्यस्त क्षमताएं प्रदान करते थे। दोनों भाषाओं को मूल रूप से स्रोत-से-स्रोत संकलक के रूप में लागू किया गया था स्रोत संकेत का C में अनुवाद किया गया था और फिर C संकलक के साथ संकलित किया गया था।[54]C ++ प्रोग्रामिंग भाषा मूल रूप से C विद वर्ग (प्रोग्रामिंग) को बज़्ने स्ट्रॉस्ट्रुप द्वारा प्रयोजन -अभिविन्यस्त प्रोग्रामिंग प्रदान करने के दृष्टिकोण के रूप में तैयार किया गया था। C -जैसे वाक्य-विन्यास के साथ प्रयोजन -अभिविन्यस्त कार्यक्षमता।[55] C ++ प्रयोजन -अभिविन्यस्त प्रोग्रामिंग में उपयोगी अधिक प्ररूपिंग सामर्थ्य, स्कूपिंग और अन्य उपकरण जोड़ता है और खाका के माध्यम से सामान्य प्रोग्रामिंग की अनुमति देता है। लगभग C , C ++ का उत्तम चयन अब C औरC ++ की संगतता के साथ अधिकांश C का समर्थन करता है।
प्रयोजन-C मूल रूप से C के ऊपर बहुत पतली परत थी और C का दृढ़ उत्तम चयन बना हुआ है जो संकर गतिशील स्थिर प्ररूपिंग प्रतिमान का उपयोग करके प्रयोजन -अभिविन्यस्त प्रोग्रामिंग की अनुमति देता है। प्रयोजन -C अपने वाक्य-विन्यास को C और लघु वार्ता दोनों से प्राप्त करता है। वाक्य-विन्यास जिसमें प्रीप्रोसेसिंग, फ़ंक्शन घोषणा और फ़ंक्शन कॉल सम्मलित हैं। C से विरासत में मिला है, चूँकि प्रयोजन -अभिविन्यस्त सुविधाओं के लिए वाक्य-विन्यास मूल रूप से लघु वार्ता से लिया गया था।
C ++ और उद्देश्य -C के अतिरिक्त, Ch (कंप्यूटर प्रोग्रामिंग), Cilk और एकीकृत समानांतर C ,C के लगभग उत्तम चयन हैं।
यह भी देखें
- C और C ++ की संगतता
- पास्कल औरC की तुलना
- प्रोग्रामिंग भाषाओं की तुलना
- अंतर्राष्ट्रीय अस्पष्ट C संकेत प्रतियोगिता
- C-आधारित प्रोग्रामिंग भाषाओं की सूची
- C संकलनकर्ता की सूची
टिप्पणियाँ
संदर्भ
- ↑ Ritchie (1993): "Thompson had made a brief attempt to produce a system coded in an early version of C—before structures—in 1972, but gave up the effort."
- ↑ Fruderica (13 December 2020). "History of C". The cppreference.com. Archived from the original on October 24, 2020. Retrieved 24 October 2020.
- ↑ Ritchie (1993): "The scheme of type composition adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's adherents would approve of."
- ↑ 4.0 4.1 "Verilog HDL (and C)" (PDF). The Research School of Computer Science at the Australian National University. June 3, 2010. Archived from the original (PDF) on November 6, 2013. Retrieved August 19, 2013.
1980s: ; Verilog first introduced ; Verilog inspired by the C programming language- ↑ "नाम पर आधारित है, और अंग्रेजी वर्णमाला में अक्षर C की तरह उच्चारित किया जाता है". English Chinese Dictionary. Retrieved 17 November 2022.
- ↑ "सी भाषा सबसे कम लोकप्रियता रेटिंग में गिरती है". Developer.com. 9 August 2016. Retrieved 2022-08-01.
- ↑ 7.0 7.1 7.2 7.3 7.4 7.5 Ritchie (1993)
- ↑ "प्रोग्रामिंग भाषा की लोकप्रियता". 2009. Archived from the original on 2009-01-16. Retrieved January 16, 2009.
- ↑ "TIOBE प्रोग्रामिंग कम्युनिटी इंडेक्स". 2009. Archived from the original on 2009-05-04. Retrieved May 6, 2009.
- ↑ 10.0 10.1 "History of C". en.cppreference.com. Archived from the original on May 29, 2018. Retrieved May 28, 2018.
- ↑ "अक्टूबर 2021 के लिए TIOBE इंडेक्स". Retrieved 2021-10-07.
- ↑ Ritchie, Dennis. "बीसीपीएल से बी से सी". Archived from the original on December 12, 2019. Retrieved September 10, 2019.
- ↑ 13.0 13.1 13.2 13.3 13.4 Jensen, Richard (9 December 2020). ""एक लानत बेवकूफी की बात" - सी की उत्पत्ति". Ars Technica (in English). Retrieved 2022-03-28.
- ↑ 14.0 14.1 Johnson, S. C.; Ritchie, D. M. (1978). "सी प्रोग्राम और यूनिक्स सिस्टम की सुवाह्यता". Bell System Tech. J. 57 (6): 2021–2048. CiteSeerX 10.1.1.138.35. doi:10.1002/j.1538-7305.1978.tb02141.x. S2CID 17510065. (Note: The PDF is an OCR scan of the original, and contains a rendering of "IBM 370" as "IBM 310".)
- ↑ McIlroy, M. D. (1987). एक रिसर्च यूनिक्स रीडर: प्रोग्रामर मैनुअल, 1971-1986 से एनोटेट किए गए अंश (PDF) (Technical report). CSTR. Bell Labs. p. 10. 139. Archived (PDF) from the original on November 11, 2017. Retrieved February 1, 2015.
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). सी प्रोग्रामिंग लैंग्वेज (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 978-0-13-110163-0.
- ↑ "C manual pages". FreeBSD विविध सूचना मैनुअल (FreeBSD 13.0 ed.). 30 May 2011. Archived from the original on January 21, 2021. Retrieved January 15, 2021. [1] Archived January 21, 2021, at the Wayback Machine
- ↑ Kernighan, Brian W.; Ritchie, Dennis M. (March 1988). सी प्रोग्रामिंग लैंग्वेज (2nd ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 978-0-13-110362-7.
- ↑ Stroustrup, Bjarne (2002). सहोदर प्रतिद्वंद्विता: C और C++ (PDF) (Report). AT&T Labs. Archived (PDF) from the original on August 24, 2014. Retrieved April 14, 2014.
- ↑ सी अखंडता. International Organization for Standardization. March 30, 1995. Archived from the original on July 25, 2018. Retrieved July 24, 2018.
- ↑ "JTC1/SC22/WG14 - सी". Home page. ISO/IEC. Archived from the original on February 12, 2018. Retrieved June 2, 2011.
- ↑ Andrew Binstock (October 12, 2011). "हर्ब सटर के साथ साक्षात्कार". Dr. Dobbs. Archived from the original on August 2, 2013. Retrieved September 7, 2013.
- ↑ "संशोधित C23 अनुसूची WG 14 N 2984" (PDF). www.open-std.org. Archived (PDF) from the original on October 13, 2022. Retrieved 2022-10-28.
- ↑ "टीआर 18037: एंबेडेड सी" (PDF). ISO / IEC. Archived (PDF) from the original on February 25, 2021. Retrieved July 26, 2011.
- ↑ Harbison, Samuel P.; Steele, Guy L. (2002). सी: एक संदर्भ मैनुअल (5th ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 978-0-13-089592-9. Contains a BNF grammar for C.
- ↑ Kernighan & Ritchie (1988), p. 192.
- ↑ Kernighan & Ritchie (1978), p. 3.
- ↑ "ISO/IEC 9899:201x (ISO C11) समिति मसौदा" (PDF). Archived (PDF) from the original on December 22, 2017. Retrieved September 16, 2011.
- ↑ Kernighan & Ritchie (1988), pp. 192, 259.
- ↑ "C++ में 10 कॉमन प्रोग्रामिंग मिस्टेक्स". Cs.ucr.edu. Archived from the original on October 21, 2008. Retrieved June 26, 2009.
- ↑ Schultz, Thomas (2004). सी और 8051 (3rd ed.). Otsego, MI: PageFree Publishing Inc. p. 20. ISBN 978-1-58961-237-2. Archived from the original on July 29, 2020. Retrieved February 10, 2012.
- ↑ Feuer, Alan R.; Gehani, Narain H. (March 1982). "प्रोग्रामिंग लैंग्वेज सी और पास्कल की तुलना". ACM Computing Surveys. 14 (1): 73–92. doi:10.1145/356869.356872. S2CID 3136859.
- ↑ Kernighan & Ritchie (1988), p. 122.
- ↑ 34.0 34.1 34.2 34.3 34.4 34.5 Cite error: Invalid
<ref>
tag; no text was provided for refs namedbk21st
- ↑ For example, gcc provides _FORTIFY_SOURCE. "Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE)". fedoraproject.org. Archived from the original on January 7, 2007. Retrieved August 5, 2012.
- ↑ เอี่ยมสิริวงศ์, โอภาศ (2016). सी के साथ प्रोग्रामिंग. Bangkok, Thailand: SE-EDUCATION PUBLIC COMPANY LIMITED. pp. 225–230. ISBN 978-616-08-2740-4.
- ↑ Raymond, Eric S. (October 11, 1996). द न्यू हैकर डिक्शनरी (3rd ed.). MIT Press. p. 432. ISBN 978-0-262-68092-9. Archived from the original on November 12, 2012. Retrieved August 5, 2012.
- ↑ "लिंट के लिए मैन पेज (फ्रीबीएसडी सेक्शन 1)". unix.com. May 24, 2001. Retrieved July 15, 2014.
- ↑ Dale, Nell B.; Weems, Chip (2014). C++ के साथ प्रोग्रामिंग और समस्या समाधान (6th ed.). Burlington, MA: Jones & Bartlett Learning. ISBN 978-1449694289. OCLC 894992484.
- ↑ डॉ। डॉब की सोर्सबुक. U.S.A.: Miller Freeman, Inc. November–December 1995.
- ↑ "CGI प्रोग्रामिंग के लिए C का उपयोग करना". linuxjournal.com. March 1, 2005. Archived from the original on February 13, 2010. Retrieved January 4, 2010.
- ↑ Perkins, Luc (17 September 2013). "सी में वेब विकास: पागल? या लोमड़ी की तरह पागल?". Medium (in English).
- ↑ "C - सभी भाषाओं की जननी". ICT Academy at IITK (in English). 2018-11-13. Retrieved 2022-10-11.
- ↑ "1. सी या सी ++ के साथ पायथन का विस्तार - पायथन 3.10.7 प्रलेखन". docs.python.org. Retrieved 2022-10-11.
- ↑ "पर्ल 5 इंजन का अवलोकन | Opensource.com". opensource.com (in English). Retrieved 2022-10-11.
- ↑ "सी और सी ++ से रूबी के लिए". www.ruby-lang.org. Retrieved 2022-10-11.
- ↑ "पीएचपी क्या है? अपना पहला PHP प्रोग्राम कैसे लिखें". freeCodeCamp.org (in English). 2022-08-03. Retrieved 2022-10-11.
- ↑ corob-msft. "प्रागमा निर्देश और __pragma और _Pragma कीवर्ड". learn.microsoft.com (in English). Retrieved 2022-09-24.
- ↑ "प्रागमास (द सी प्रीप्रोसेसर)". gcc.gnu.org. Retrieved 2022-09-24.
- ↑ "प्रागमास". Intel (in English). Retrieved 2022-04-10.
- ↑ Roberts, Eric S. (21 March 1989). "सी में अपवादों को लागू करना" (PDF). DEC Systems Research Center. SRC-RR-40. Retrieved 4 January 2022.
{{cite journal}}
: Cite journal requires|journal=
(help)- ↑ McMillan, Robert (August 1, 2013). "क्या जावा अपना मोजो खो रहा है?". Wired. Archived from the original on February 15, 2017. Retrieved March 5, 2017.
- ↑ O'Regan, Gerard (September 24, 2015). कंप्यूटिंग के स्तंभ: चुनिंदा, महत्वपूर्ण प्रौद्योगिकी फर्मों का एक संग्रह. ISBN 978-3319214641. OCLC 922324121.
- ↑ Rauchwerger, Lawrence (2004). समानांतर कंप्यूटिंग के लिए भाषाएं और संकलक: 16वीं अंतर्राष्ट्रीय कार्यशाला, एलसीपीसी 2003, कॉलेज स्टेशन, टेक्सास, यूएसए, 2-4 अक्टूबर, 2003: संशोधित पेपर. Springer. ISBN 978-3540246442. OCLC 57965544.
- ↑ Stroustrup, Bjarne (1993). "सी++ का इतिहास: 1979−1991" (PDF). Archived (PDF) from the original on February 2, 2019. Retrieved June 9, 2011.
स्रोत
- Ritchie, Dennis M. (March 1993). "सी भाषा का विकास". ACM SIGPLAN Notices. ACM. 28 (3): 201–208. doi:10.1145/155360.155580.
- लेखक के सौजन्य से, पर भी Ritchie, Dennis M. "शुद्ध". www.bell-labs.com. Retrieved 2022-03-29.
- Ritchie, Dennis M. (1993). "सी भाषा का विकास". The Second ACM SIGPLAN Conference on History of Programming Languages (HOPL-II). ACM. pp. 201–208. doi:10.1145/154766.155580. ISBN 0-89791-570-4. Retrieved November 4, 2014.
- Kernighan, Brian W.; Ritchie, Dennis M. (1988). सी प्रोग्रामिंग लैंग्वेज (2nd ed.). Prentice Hall. ISBN 0-13-110362-8.
अग्रिम पठन
- Plauger, P.J. (1992). The Standard C Library (1 ed.). Prentice Hall. ISBN 978-0131315099. (sourC e)
- Banahan, M.; Brady, D.; Doran, M. (1991). The C Book: Featuring the ANSI C Standard (2 ed.). Addison-Wesley. ISBN 978-0201544336. (free)
- Harbison, Samuel; Steele, Guy Jr. (2002). C: A Reference Manual (5 ed.). Pearson. ISBN 978-0130895929. (arChive)
- King, K.N. (2008). C Programming: A Modern Approach (2 ed.). W. W. Norton. ISBN 978-0393979503. (arChive)
- Griffiths, David; Griffiths, Dawn (2012). Head First C (1 ed.). O'Reilly. ISBN 978-1449399917.
- Perry, Greg; Miller, Dean (2013). C Programming: Absolute Beginner's Guide (3 ed.). Que. ISBN 978-0789751980.
- Deitel, Paul; Deitel, Harvey (2015). C: How to Program (8 ed.). Pearson. ISBN 978-0133976892.
- Gustedt, Jens (2019). Modern C (2 ed.). Manning. ISBN 978-1617295812. (free)
इस पेज में लापता आंतरिक संपर्क की सूची
- सामान्य प्रयोजन की भाषा
- बी (प्रोग्रामिंग भाषा)
- प्रोग्रामिंग भाषा की लोकप्रियता को मापना
- स्थिर प्रकार प्रणाली
- रिकर्सन (कंप्यूटर विज्ञान)
- अंतरराष्ट्रीय मानकीकरण संगठन
- टीआईओबीई सूचकांक
- सरणी डेटा प्रकार
- बहाव को काबू करें
- विवरणों के ब्लॉक
- सूचक (कंप्यूटर प्रोग्रामिंग)
- कार्यभार (कंप्यूटर विज्ञान)
- स्ट्रिंग (कंप्यूटर विज्ञान)
- स्रोत कोड
- बोहेम कचरा कलेक्टर
- पायथन (प्रोग्रामिंग भाषा)
- जूलिया (प्रोग्रामिंग भाषा)
- स्विफ्ट (प्रोग्रामिंग भाषा)
- सिंटेक्स (प्रोग्रामिंग भाषाएं)
- सभा की भाषा
- बरोज़ एमसीपी
- निम्नतम सामान्य भाजक (कंप्यूटर)
- स्थान (कंप्यूटर सॉफ्टवेयर)
- अक्षरों को सांकेतिक अक्षरों में बदलना
- लचीला सरणी सदस्य
- निश्चित-बिंदु अंकगणित
- शाब्दिक स्ट्रिंग
- विवरण (कंप्यूटर विज्ञान)
- अल्पविराम संचालिका
- अंतरिक्ष (विराम चिह्न)
- C 11 (C मानक संशोधन)
- बेल का पात्र
- चलाने का समय (कार्यक्रम जीवनचक्र चरण)
- वृद्धि और कमी ऑपरेटरों
- कार्रवाई के आदेश
- संकेतक अंकगणित
- गतिशील स्मृति आवंटन
- उच्च-क्रम फ़ंक्शन
- लिंक्ड सूची
- विखंडन दोष
- नल पॉइंटर
- लटकने वाला सूचक
- बहु आयामी सरणी
- लीनियर अलजेब्रा
- काटा
- ल यूनिक्स विशिष्टता
- स्मृति प्रबंधन
- क्रमबद्धता
- दुभाषिया (कंप्यूटिंग)
- सी-परिवार प्रोग्रामिंग भाषाओं की सूची
- ्सेप्शन हेंडलिंग
- सीईआरटी कोडिंग मानक
- सीएच (कंप्यूटर प्रोग्रामिंग)
- स्रोत से स्रोत संकलक
- छोटी बात
बाहरी संबंध
- ISOC Working Group offiC ial website
- ISO/IEC 9899, publiC ly available offiC ialC doC uments, inC luding the C 99 Rationale
- "C99 with Technical corrigenda TC1, TC2, and TC3 included" (PDF). (3.61 MB)
- C omp.lang.C Frequently Asked Questions
- A History of C , by Dennis RitChie
- C Library ReferenC e and Examples