सी (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(24 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''' के रूप में उच्चारित' <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 की विशेषताएं लक्षित CPU की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे [[ऑपरेटिंग सिस्टम]], [[डिवाइस ड्राइवर]], [[प्रोटोकॉल स्टैक]] में स्थायी उपयोग मिला है, चूंकि कम हो रहा है।<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''' को <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 ने लगातार TIOBE सूची में शीर्ष दो भाषाओं में स्थान दिया है, जो प्रोग्रामिंग भाषाओं की लोकप्रियता का पैमाना है।<ref name="TIOBE-2021">{{cite web|title=अक्टूबर 2021 के लिए TIOBE इंडेक्स|url=https://www.tiobe.com/tiobe-index/|access-date=2021-10-07}}</ref>
प्रोग्रामिंग भाषा 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|[[केन थॉम्पसन]] के साथCप्रोग्रामिंग भाषा के आविष्कारक डेनिस रिची (दाएं)।]]C [[ALGOL]] परंपरा में अनिवार्य प्रोग्रामिंग, प्रक्रियात्मक भाषा है। इसमें स्थिर प्रकार की प्रणाली है।C में, सभी [[निष्पादन योग्य कोड]] [[सबरूटीन]] (जिसे फ़ंक्शन भी कहा जाता है, चूंकि [[कार्यात्मक प्रोग्रामिंग]] के अर्थ में नहीं) के भीतर समाहित है। [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] मूल्य द्वारा पारित किया जाता है, चूंकि ऐरे डेटा प्रकार को पॉइंटर (कंप्यूटर प्रोग्रामिंग) के रूप में पारित किया जाता है, यानी सरणी में पहले आइटम का पता। पास-बाय-रेफरेंसCमें स्पष्ट रूप से पासिंग पॉइंटर्स द्वारा संदर्भित की जा रही चीज़ के लिए सिम्युलेटेड है।
== अवलोकन ==
[[File:Ken n dennis.jpg|thumb|[[केन थॉम्पसन]] के साथ सी प्रोग्रामिंग भाषा के आविष्कारक डेनिस रिची (दाएं)।]]C [[ALGOL|ऐल्गॉल]] परंपरा में अनिवार्य प्रोग्रामिंग प्रक्रियात्मक भाषा है। इसमें स्थिर प्रकार की प्रणाली है। C में सभी [[निष्पादन योग्य कोड|निष्पादन योग्य]] संकेत [[सबरूटीन|उप-दैनिकि]] जिसे फ़ंक्शन भी कहा जाता है, चूंकि [[कार्यात्मक प्रोग्रामिंग]] के अर्थ में नहीं के भीतर समाहित है। [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] मूल्य द्वारा पारित किया जाता है, चूंकि सरणी डेटा प्रकार को सूचक कंप्यूटर प्रोग्रामिंग के रूप में पारित किया जाता है, अर्थात सरणी में पहले विषय का पता संदर्भ से गुजरें 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>. उपयोगकर्ता-परिभाषित नाम कि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> उपयोगकर्ता-परिभाषित नाम किसी भी प्रकार के [[सिगिल (कंप्यूटर प्रोग्रामिंग)]] द्वारा खोज शब्दों से अलग नहीं हैं।
* इसमें बड़ी संख्या में अंकगणित, बिटवाइज़ और लॉजिक ऑपरेटर हैं: {{codes|+|+{{=}}|++|&amp;|{{!!}}|d=,}}, आदि।
* इसमें बड़ी संख्या में अंकगणित, बिटवाइज़और तर्क ऑपरेटर आदि हैं।
* कथन में से अधिक असाइनमेंट (कंप्यूटर विज्ञान) किए जा सकते हैं।
* कथन में से अधिक कार्यभार कंप्यूटर विज्ञान दिए जा सकते हैं।
* कार्य:
* फ़ंक्शन:
** जरूरत न होने पर फंक्शन रिटर्न वैल्यू को नजरअंदाज किया जा सकता है।
** आवश्यकता न होने पर फंक्शन वापसी मूल्य को अनदेखा किया जा सकता है।
** फ़ंक्शन और डेटा पॉइंटर्स तदर्थ [[रन-टाइम बहुरूपता]] की अनुमति देते हैं।
** फ़ंक्शन और डेटा सूचक तदर्थ [[रन-टाइम बहुरूपता|क्रम बहुरूपता]] की अनुमति देते हैं।
** कार्यों को अन्य कार्यों के शाब्दिक दायरे में परिभाषित नहीं किया जा सकता है।
** कार्यों को अन्य कार्यों के शाब्दिक सीमा में परिभाषित नहीं किया जा सकता है।
** वेरिएबल्स को फंक्शन के भीतर परिभाषित किया जा सकता है, लेक्सिकल वेरिएबल स्कोप के साथ।
** चर को फंक्शन के भीतर परिभाषित किया जा सकता है, शाब्दिक चर विस्तारके साथ।
** फ़ंक्शन स्वयं कॉल कर सकता है, इसलिए रिकर्सन (कंप्यूटर विज्ञान) समर्थित है।
** फ़ंक्शन स्वयं कॉल कर सकता है, इसलिए रिकर्सन (कंप्यूटर विज्ञान) समर्थित है।
* डेटा टाइपिंग [[स्टेटिक टाइपिंग]] है, लेकिन [[मजबूत और कमजोर टाइपिंग]]; सभी डेटा का प्रकार होता है, लेकिन [[निहित रूपांतरण]] संभव हैं।
* डेटा प्ररूपिंग [[स्टेटिक टाइपिंग|स्थिर प्ररूपिंग]] है, किन्तु [[मजबूत और कमजोर टाइपिंग|मजबूत और कमजोर प्ररूपिंग]] सभी डेटा का प्रकार होता है, किन्तु [[निहित रूपांतरण]] संभव हैं।
* उपयोगकर्ता परिभाषित (टाइपपीफ) और यौगिक प्रकार संभव हैं।
* उपयोगकर्ता परिभाषित प्ररूपीफ और यौगिक प्रकार संभव हैं।
** विषम समुच्चय डेटा प्रकार (<code>[[struct (C programming language)|struct]]</code>) संबंधित डेटा तत्वों को इकाई के रूप में ्सेस और असाइन करने की अनुमति दें।
** विषम समुच्चय डेटा प्रकार (<code>[[struct (C programming language)|struct]]</code>) संबंधित डेटा तत्वों को इकाई के रूप में अभिगम और निर्धारण करने की अनुमति दें।
** संघ प्रकार अतिव्यापी सदस्यों के साथ संरचना है; संग्रहीत अंतिम सदस्य ही मान्य है।
** संघ प्रकार अतिव्यापी सदस्यों के साथ संरचना है संग्रहीत अंतिम सदस्य ही मान्य है।
** ऐरे डेटा टाइप सूचीिंग सेकेंडरी नोटेशन है, जिसे पॉइंटर अंकगणित के संदर्भ में परिभाषित किया गया है। संरचनाओं के विपरीत, सरणियाँ प्रथम श्रेणी की वस्तुएँ नहीं हैं: उन्हें अंतर्निर्मित ऑपरेटरों का उपयोग करके असाइन या तुलना नहीं की जा सकती है। उपयोग या परिभाषा में कोई सरणी कीवर्ड नहीं है; इसके बजाय, वर्गाकार कोष्ठक, उदाहरण के लिए, वाक्यात्मक रूप से सरणियों को इंगित करते हैं <code>month[11]</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में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं शामिल नहीं हैं (जैसे [[वस्तु उन्मुख कार्यकर्म]] और [[कचरा संग्रह (कंप्यूटर विज्ञान)]]), इन्हें अक्सर बाहरी पुस्तकालयों (जैसे, [[GObject]] या Boehm कचरा) के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। त्र करनेवाला)।
चूँकि C में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं सम्मलित नहीं हैं जैसे [[वस्तु उन्मुख कार्यकर्म]] और [[कचरा संग्रह (कंप्यूटर विज्ञान)]]), इन्हें अधिकांशतः बाहरी लाइब्रेरीों के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। इसका उपयोग करने वालों में [[ग्लिब OS]] या [[बोहेम GC]] मुख्य थे।


=== अन्य भाषाओं से संबंध ===
=== अन्य भाषाओं से संबंध ===
[[सी ++|C++]],Cशार्प (प्रोग्रामिंग भाषा) | सी#, यूनिक्स कीC[[सी खोल|खोल]], [[डी (प्रोग्रामिंग भाषा)]], [[जाओ (प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]] (जावास्क्रिप्ट सहित) सहित बाद की कई भाषाओं ने प्रत्यक्ष या अप्रत्यक्ष रूप सेCसे उधार लिया है। ट्रांसपिलर्स), जूलिया (प्रोग्रामिंग भाषा), [[लिम्बो (प्रोग्रामिंग भाषा)]], [[एलपीसी (प्रोग्रामिंग भाषा)|एलपीC(प्रोग्रामिंग भाषा)]], [[उद्देश्य सी]], [[पर्ल]], [[पीएचपी]], पायथन (प्रोग्रामिंग भाषा), [[रूबी (प्रोग्रामिंग भाषा)]], [[जंग (प्रोग्रामिंग भाषा)]], स्विफ्ट (प्रोग्रामिंग) भाषा), Verilog और [[SystemVerilog]] (हार्डवेयर विवरण भाषाएँ)।<ref name="vinsp" /> इन भाषाओं ने अपनी कई [[नियंत्रण संरचनाएं]] और अन्य बुनियादी विशेषताएंCसे खींची हैं। उनमें से अधिकांश (पायथन नाटकीय अपवाद होने के नाते)Cके लिए अत्यधिक समान सिंटैक्स (प्रोग्रामिंग भाषाएं) भी व्यक्त करते हैं, और वे पहचानने योग्य अभिव्यक्ति और कथनC[[सी सिंटैक्स|सिंटैक्स]] को जोड़ते हैं अंतर्निहित प्रकार के सिस्टम, डेटा मॉडल और शब्दार्थ के साथ जो मौलिक रूप से भिन्न हो सकते हैं।
[[सी ++|C ++]],C स्पष्ट प्रोग्रामिंग भाषा C, यूनिक्स की C [[सी खोल|आवरण]], [[डी (प्रोग्रामिंग भाषा)|C (प्रोग्रामिंग भाषा)]], [[जाओ (प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]] सहित बाद की कई भाषाओं ने प्रत्यक्ष या अप्रत्यक्ष रूप से C से उद्धृत लिया है। ट्रांसपिलर्स), जूलिया (प्रोग्रामिंग भाषा), [[लिम्बो (प्रोग्रामिंग भाषा)]], [[एलपीसी (प्रोग्रामिंग भाषा)]], [[उद्देश्य सी]], [[पर्ल|मैक्तिक]], [[पीएचपी|PHP]], पायथन (प्रोग्रामिंग भाषा), [[रूबी (प्रोग्रामिंग भाषा)]], [[जंग (प्रोग्रामिंग भाषा)]], स्विफ्ट (प्रोग्रामिंग) भाषा), वेरिलोग और [[SystemVerilog|प्रणाली वेरिलॉग]] हार्डवेयर विवरण भाषाएँ।<ref name="vinsp" /> इन भाषाओं ने अपनी कई [[नियंत्रण संरचनाएं]] और अन्य आधारभूत विशेषताएं C से खींची हैं। उनमें से अधिकांश पायथन नाटकीय अपवाद होने के नाते C के लिए अत्यधिक समान वाक्य-विन्यास प्रोग्रामिंग भाषाएं भी व्यक्त करते हैं, और वे पहचानने योग्य अभिव्यक्ति और कथन C [[सी सिंटैक्स|वाक्य-विन्यास]] को जोड़ते हैं अंतर्निहित प्रकार के प्रणाली, डेटा मॉडल और शब्दार्थ के साथ जो मौलिक रूप से भिन्न हो सकते हैं।


== इतिहास ==
== इतिहास ==
Line 72: Line 69:
=== प्रारंभिक घटनाक्रम ===
=== प्रारंभिक घटनाक्रम ===
{| class="wikitable floatright" style="margin-left: 1.5em;"
{| class="wikitable floatright" style="margin-left: 1.5em;"
|+Timeline of language development
|+भाषा के विकास की समयरेखा
|-
|-
! Year
! वर्ष
! C Standard<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>
! 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
| Birth
| जन्म
|-
|-
| 1978
| 1978
| [[K&R C]]
| [[K&R C|K और R C]]
|-
|-
| 1989/1990
| 1989/1990
| [[ANSI C|ANSI]]Cand ISO C
| [[ANSI C|ANSI]]C and ISO C  
|-
|-
| 1999
| 1999
| [[C99]]
| [[C99|C 99]]
|-
|-
| 2011
| 2011
| [[C11 (C standard revision)|C11]]
| [[C11 (C standard revision)|C 11]]
|-
|-
| 2017
| 2017
| [[C17 (C standard revision)|C17]]
| [[C17 (C standard revision)|C 17]]
|-
|-
| [[To be determined|TBD]]
| [[To be determined|TBD]]
| [[C2x]]
| [[C2x|C 2x]]
|}
|}
C की उत्पत्ति यूनिक्स ऑपरेटिंग सिस्टम के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा [[PDP-7]] पर असेंबली भाषा में लागू की गई थी, जिसमें सहयोगियों के कई विचार शामिल थे। आखिरकार, उन्होंने ऑपरेटिंग सिस्टम को [[PDP-11]] में पोर्ट करने का फैसला किया। यूनिक्स का मूल PDP-11 संस्करण भी असेम्बली भाषा में विकसित किया गया था।<ref name="sigplan" />
C की उत्पत्ति यूनिक्स संचालन प्रणाली के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा [[PDP-7]] पर भाषा में लागू की गई थी, जिसमें सहयोगियों के कई विचार सम्मलित थे। आखिरकार, उन्होंने संचालन प्रणाली को [[PDP-11]] में पोर्ट करने का फैसला किया। यूनिक्स का मूल PDP-11 संस्करण भी जनसमूह भाषा में विकसित किया गया था।<ref name="sigplan" />
====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 शब्दार्थ के रूप में वर्णित किया था।<ref name=Ars /> BCPL मुख्य रूप से B के पास नई मशीनों को पोर्ट करने की सुविधा के लिए [[बूटस्ट्रैपिंग]] संकलक था।<ref name=Ars />चूँकि, कुछ उपयोगिताएँ अंततः B में लिखी गईं क्योंकि यह बहुत धीमी थी, और PDP-11 सुविधाओं जैसे [[बाइट]] संबोधनीयता का लाभ नहीं उठा सकती थी।
 
==== नई 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>. सूचक , अन्य प्रकार के सूचक उत्पन्न करने की क्षमता, सभी प्रकार की सरणियाँ, और फ़ंक्शन से लौटाए जाने वाले प्रकार भी जोड़े गए। अभिव्यक्तियों के भीतर सरणी याँ संकेत बन गईं। नया संकलक लिखा गया था, और भाषा का नाम बदलकर 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>
==== संरचनाएं और यूनिक्स कर्नेल पुनर्लेखन ====
संस्करण 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 ===
[[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 ने कई भाषा सुविधाओं प्रारंभ की।
* स्टैंडर्ड I/O लाइब्रेरी
* <code>long int</code> डेटा प्रकार
* <code>unsigned int</code> डेटा प्रकार
* फॉर्म के कंपाउंड कार्यभार ऑपरेटर <code>=''op''</code> (जैसे कि <code>=-</code>) के रूप में बदल दिए गए थे <code>''op''=</code> (वह है, <code>-=</code>) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिए <code>i=-10</code>, जिसकी व्याख्या की गई थी <code>i&nbsp;=-&nbsp;10</code> ( <code>i</code> में 10 का कमी) संभवतः प्रयोजन के अतिरिक्त <code>i=-10</code> हो, तो <code>i</code> -10 होने देना।
 
1989 के ANSI स्टैंडर्ड के प्रकाशन के बाद भी, कई वर्षों तक के और R C को अभी भी सबसे कम सामान्य विभाजक (कंप्यूटर) माना जाता था, जब अधिकतम सुवाह्यता वांछित होने पर C प्रोग्राम ने स्वत: को प्रतिबंधित कर दिया था, क्योंकि कई पुराने संकलक अभी भी उपयोग में थे और क्योंकि सावधानी से लिखा गया था K&RC संकेत कानूनी स्टैंडर्ड C भी हो सकता है।


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. */
{{main|B (programming language)}}
थॉम्पसन नए प्लेटफॉर्म के लिए उपयोगिताओं को बनाने के लिए प्रोग्रामिंग भाषा चाहता था। सबसे पहले, उन्होंने [[फोरट्रान]] कंपाइलर बनाने की कोशिश की, लेकिन जल्द ही इस विचार को छोड़ दिया। इसके बजाय, उन्होंने हाल ही में विकसित [[बीसीपीएल]] [[सिस्टम प्रोग्रामिंग भाषा]] का कट-डाउन संस्करण बनाया। बीसीपीएल का आधिकारिक विवरण उस समय उपलब्ध नहीं था,<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> और थॉम्पसन ने वाक्य-विन्यास को कम शब्दयुक्त होने के लिए संशोधित किया, और सरलीकृत ALGOL के समान जिसे SMALGOL के रूप में जाना जाता है।<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> नतीजा यह था कि थॉम्पसन ने बी (प्रोग्रामिंग भाषा) कहा था।<ref name="sigplan" />उन्होंने B को बहुत सारे SMALGOL सिंटैक्स के साथ BCPL शब्दार्थ के रूप में वर्णित किया।<ref name=Ars />बीसीपीएल की तरह, बी के पास नई मशीनों को पोर्ट करने की सुविधा के लिए [[बूटस्ट्रैपिंग]] कंपाइलर था।<ref name=Ars />हालाँकि, कुछ उपयोगिताएँ अंततः B में लिखी गईं क्योंकि यह बहुत धीमी थी, और PDP-11 सुविधाओं जैसे [[बाइट]] एड्रेसबिलिटी का लाभ नहीं उठा सकती थी।


==== न्यू बी और फर्स्टCरिलीज ====
/* 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. */
1971 में, अधिक शक्तिशाली पीडीपी-11 की विशेषताओं का उपयोग करने के लिए, रिची ने बी में सुधार करना शुरू किया। महत्वपूर्ण जोड़ चरित्र प्रकार था। उन्होंने इसे न्यू बी कहा।<ref name=Ars /> थॉम्पसन ने [[अनुसंधान यूनिक्स]] कर्नेल लिखने के लिए एनबी का उपयोग करना शुरू किया, और उनकी आवश्यकताओं ने भाषा के विकास की दिशा को आकार दिया।<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>
{


long test1;


==== संरचनाएं और यूनिक्स कर्नेल री-राइट ====
register /* int */ test2; /* Again, note that 'int' is not required here. The 'int' type specifier */
संस्करण 4 यूनिक्स में, नवंबर 1973 में जारी किया गया, यूनिक्स [[कर्नेल (ऑपरेटिंग सिस्टम)]] कोCमें बड़े पैमाने पर फिर से लागू किया गया।<ref name="sigplan" />इस समय तक,Cभाषा ने कुछ शक्तिशाली विशेषताएं प्राप्त कर ली थीं जैसे कि <code>struct</code> प्रकार।


Cप्रीप्रोसेसर को 1973 के आसपास [[एलन स्नाइडर (कंप्यूटर वैज्ञानिक)]] के आग्रह पर पेश किया गया था और बीसीपीएल और पीएल/आई में उपलब्ध फ़ाइल-समावेशन तंत्र की उपयोगिता की मान्यता में भी। इसके मूल संस्करण में केवल फाइलें और सरल स्ट्रिंग प्रतिस्थापन शामिल हैं: <code>#include</code> तथा <code>#define</code> पैरामीटर रहित मैक्रोज़ का। इसके तुरंत बाद, इसे तर्क और सशर्त संकलन के साथ मैक्रोज़ को शामिल करने के लिए, ज्यादातर [[माइक लेस्क]] और फिर जॉन रेसर द्वारा विस्तारित किया गया था।<ref name="sigplan">{{harvtxt|Ritchie|1993}}</ref>
/* in the comment would be required in later versions of C. */
यूनिक्स असेंबली भाषा के अलावा किCअन्य भाषा में लागू किए गए पहले ऑपरेटिंग सिस्टम कर्नेल में से था। पहले के उदाहरणों में 1961 में [[बरोज़ लार्ज सिस्टम्स]] (जो ALGOL में लिखा गया था) के लिए [[मॉलटिक्स]] सिस्टम (जो PL/I में लिखा गया था) और बरोज़ MCP (MCP) शामिल हैं। <!--Better?: {{Circa|1977}}--> 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>


/* The 'register' keyword indicates to the compiler that this variable should */


=== के एंड आर सी ===<!--[[K&R C]] redirects here-->
/* ideally be stored in a register as opposed to within the stack frame. */
[[File:The C Programming Language, First Edition Cover (2).svg|thumb|240x240px|दCप्रोग्रामिंग भाषा पुस्तक का कवर, पहला संस्करण, [[ब्रायन कर्निघन]] और डेनिस रिची द्वारा]]1978 में, ब्रायन कर्निघन और डेनिस रिची ने दC[[सी प्रोग्रामिंग लैंग्वेज|प्रोग्रामिंग भाषा]] का पहला संस्करण प्रकाशित किया।<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प्रोग्रामर्स को के एंड आर के रूप में जाना जाने वाला यह पुस्तक, भाषा के अनौपचारिक विशिष्टता (तकनीकी मानक) के रूप में कई वर्षों तक काम करता था।Cके जिस संस्करण का वर्णन करता है उसे सामान्यतः 'K&R C' के रूप में संदर्भित किया जाता है।<!--boldface per WP:R#PLA-->. जैसा कि यह 1978 में जारी किया गया था, इसे C78 भी कहा जाता है।<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> नीचे वर्णित एएनएसआईCमानक को शामिल करता है।


के एंड आर ने कई भाषा सुविधाओं की शुरुआत की:
test1 = some_function();
* मानक I/O पुस्तकालय
 
* <code>long int</code> डेटा प्रकार
if (test1 > 1)
* <code>unsigned int</code> डेटा प्रकार
* फॉर्म के कंपाउंड असाइनमेंट ऑपरेटर <code>=''op''</code> (जैसे कि <code>=-</code>) के रूप में बदल दिए गए थे <code>''op''=</code> (वह है, <code>-=</code>) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिए <code>i=-10</code>, जिसकी व्याख्या की गई थी <code>i&nbsp;=-&nbsp;10</code> (कमी <code>i</code> 10 द्वारा) संभवतः इरादा के बजाय <code>i&nbsp;=&nbsp;-10</code> (होने देना <code>i</code> -10 हो)


1989 के एएनएसआई मानक के प्रकाशन के बाद भी, कई वर्षों तक के एंड आरCको अभी भी सबसे कम सामान्य विभाजक (कंप्यूटर) माना जाता था, जब अधिकतम सुवाह्यता वांछित होने परCप्रोग्रामर ने खुद को प्रतिबंधित कर दिया था, क्योंकि कई पुराने कंपाइलर अभी भी उपयोग में थे, और क्योंकि सावधानी से लिखा गया था K&RCकोड कानूनी मानकCभी हो सकता है।
test2 = 0;


Cके शुरुआती संस्करणों में, केवल ऐसे कार्य जो अन्य प्रकारों को वापस करते हैं <code>int</code> फ़ंक्शन परिभाषा से पहले उपयोग किए जाने पर घोषित किया जाना चाहिए; पूर्व घोषणा के बिना उपयोग किए गए कार्यों को रिटर्न प्रकार माना जाता था <code>int</code>.
else


उदाहरण के लिए:
test2 = other_function();


<वाक्यविन्यास प्रकाश लैंग = सी>
return test2;
लंबा कुछ_फंक्शन (); /* यह फंक्शन डिक्लेरेशन है, इसलिए कंपाइलर इस फंक्शन का नाम और रिटर्न टाइप जान सकता है। */
/ * इंट * / अन्य_फंक्शन (); /* और समारोह घोषणा। यहाँ अंतर्निहित 'int' प्रकार है क्योंकि हमCके शुरुआती संस्करण के बारे में बात कर रहे हैं। यह दिखाने के लिए यहाँ टिप्पणी की गई है कि यह बाद के वेरिएंट में कहाँ जा सकता है। */


/* int */calling_function() /* यह फ़ंक्शन परिभाषा है, जिसमें {घुंघराले कोष्ठक} में निम्नलिखित कोड का मुख्य भाग शामिल है, रिटर्न प्रकार 'int' है, लेकिन यह निहित है इसलिए 'int' को बताने की कोई आवश्यकता नहीं हैCके इस प्रारंभिक संस्करण का उपयोग कर */
{
  लंबा परीक्षण 1;
  रजिस्टर / * int * / test2; / * फिर से, ध्यान दें कि 'int' की आवश्यकता नहीं है, और * / के रूप में दिखाया गया है
  /* केवल यह बताने के लिए टिप्पणी किCके बाद के संस्करणों में इसकी आवश्यकता कहां होगी। */
  /* 'रजिस्टर' कीवर्ड संकलक को इंगित करता है कि यह चर होना चाहिए */
  /* आदर्श रूप से स्टैक फ्रेम के विपरीत रजिस्टर में संग्रहीत किया जाना चाहिए। */
  test1 = some_function ();
  अगर (test1> 1)
  टेस्ट 2 = 0;
  वरना
  test2 = अन्य_फंक्शन ();
  वापCपरीक्षण 2;
}
}
</वाक्यविन्यास हाइलाइट> <code>int</code> ई> टाइप विनिर्देशक जो टिप्पणी की गई हैं उन्हें के एंड आरCमें छोड़ा जा सकता है, लेकिन बाद के मानकों में आवश्यक हैं।


चूंकि के एंड आर फ़ंक्शन घोषणाओं में फ़ंक्शन तर्कों के बारे में कोई जानकारी शामिल नहीं थी, फ़ंक्शन पैरामीटर प्रकार की जांच नहीं की गई थी, चूंकि कुछ संकलक चेतावनी संदेश जारी करेंगे यदि किCस्थानीय फ़ंक्शन को तर्कों की गलत संख्या के साथ बुलाया गया था, या यदि बाहरी फ़ंक्शन पर ाधिक कॉल विभिन्न संख्याओं या प्रकार के तर्कों का उपयोग किया। यूनिक्स की [[लिंट प्रोग्रामिंग टूल]] यूटिलिटी जैसे अलग उपकरण विकसित किए गए थे जो (अन्य बातों के अलावा) कई स्रोत फ़ाइलों में फ़ंक्शन उपयोग की निरंतरता की जांच कर सकते थे।
</blockquote>इस प्रारूप में विनिर्देशक जो टिप्पणी की गई हैं उन्हें के और R C में छोड़ा जा सकता है, किन्तु बाद के स्टैंडर्डों में आवश्यक हैं।


के एंड आरCके प्रकाशन के बाद के वर्षों में, एटी एंड टी (विशेष रूप से पोर्टेबल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 फ़ंक्शन घोषणा ओं में फ़ंक्शन तर्कों के बारे में कोई जानकारी सम्मलित नहीं थी, फ़ंक्शन पैरामीटर प्रकार की जांच नहीं की गई थी, चूंकि कुछ संकलक चेतावनी संदेश प्रस्तुत करेंगे यदि किसी स्थानीय फ़ंक्शन को तर्कों की गलत संख्या के साथ बुलाया गया था, या यदि बाहरी फ़ंक्शन पर कॉल विभिन्न संख्याओं या प्रकार के तर्कों का उपयोग किया। यूनिक्स की [[लिंट प्रोग्रामिंग टूल|लिंट प्रोग्रामिंग]] उपकरण उपयोगिता जैसे अलग उपकरण विकसित किए गए थे जो अन्य बातों के अतिरिक्त कई स्रोत फ़ाइलों में फ़ंक्शन उपयोग की निरंतरता की जांच कर सकते थे।
* <code>[[void type|void]]</code> कार्य (यानी, बिना वापCमूल्य वाले कार्य)
* फ़ंक्शन लौट रहा है <code>[[Struct (C programming language)|struct]]</code> या <code>[[union (computer science)|union]]</code> प्रकार (पहले केवल सूचक, पूर्णांक या फ्लोट लौटाया जा सकता था)
* असाइनमेंट (कंप्यूटर विज्ञान) के लिए <code>struct</code> डेटा के प्रकार
* प्रगणित प्रकार (पहले, पूर्णांक निश्चित मानों के लिए प्रीप्रोसेसर परिभाषाएँ उपयोग की जाती थीं, उदा। <code>#define GREEN 3</code>)


[[सी मानक पुस्तकालय|Cमानक पुस्तकालय]] पर बड़ी संख्या में विस्तार और समझौते की कमी, साथ में भाषा की लोकप्रियता और तथ्य यह है कि यूनिक्स कंपाइलर्स ने भी के एंड आर विनिर्देशन को सटीक रूप से लागू नहीं किया, जिससे मानकीकरण की आवश्यकता हुई।{{Citation needed|date=April 2022}}
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> और कुछ अन्य विक्रेता इनमें सम्मलित हैं:
* <code>[[void type|void]]</code> कार्य अर्थात, अतिरिक्त वापसी मूल्य वाले कार्य
* फ़ंक्शन लौट रहा है <code>[[Struct (C programming language)|struC t]]</code> या <code>[[union (computer science)|union]]</code> प्रकार पहले केवल सूचक, पूर्णांक या फ्लोट लौटाया जा सकता था
* कार्यभार कंप्यूटर विज्ञान के लिए <code>struct</code> डेटा के प्रकार
* प्रगणित प्रकार पहले, पूर्णांक निश्चित मानों के लिए पूर्वप्रक्रमक परिभाषाएँ उपयोग की जाती थीं, उदा <code>#define GREEN 3</code>)


[[सी मानक पुस्तकालय|C स्टैंडर्ड लाइब्रेरी]] पर बड़ी संख्या में विस्तार और समझौते की कमी, साथ में भाषा की लोकप्रियता और तथ्य यह है कि यूनिक्स संकलनकर्ता ने भी K और R C विनिर्देशन को त्रुटिहीन रूप से लागू नहीं किया, जिससे स्टैंडर्डीकरण की आवश्यकता हुई।
=== ANSI C और ISO C ===
{{Main|ANSI C}}


=== एएनएसआईCऔर आईएसओ सी ===
1970 और 1980 के दशक के अंत में, IBM PC सहित विभिन्न प्रकार के [[मेनफ़्रेम कंप्यूटर]], [[मिनी कंप्यूटर]] और [[माइक्रो]] कंप्यूटर के लिए C के संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में अधिक वृद्धि होने लगी थी।
{{Main|ANSI C}}


<!-- [[WP:NFCC]] violation: [[File:The C Programming Language cover.svg|thumb|240x240px|The cover of the book, ''[[The C Programming Language]]'', second edition by [[Brian Kernighan]] and [[Dennis Ritchie]] covering ANSI C]] -->
1983 में, अमेरिकी राष्ट्रीय स्टैंडर्ड संस्थान (ANSI) ने यूनिक्स कार्यान्वयन पर C स्टैंडर्ड के आधार पर C . X3J11 के स्टैंडर्ड विनिर्देश स्थापित करने के लिए समिति, X3J11 का गठन किया चूंकि, यूनिक्स C लाइब्रेरी के अ-सुवाहय़ भाग को 1988 के [[POSIX]] स्टैंडर्ड का आधार बनने के लिए [[इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स|इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल और इलेक्ट्रॉनिक्स इंजीनियर्स]] कार्यरत समूह 1003 को सौंप दिया गया था। 1989 में,C स्टैंडर्ड को ANSI X3.159-1989 प्रोग्रामिंग भाषाC के रूप में अनुमोदित किया गया था। भाषा के इस संस्करण को अधिकांशतः ANSI C , स्टैंडर्ड C , या कभी-कभी C 89 के रूप में संदर्भित किया जाता है।
1970 और 1980 के दशक के अंत में, [[आईबीएम पीसी|आईबीएम पी]]Cसहित विभिन्न प्रकार के [[मेनफ़्रेम कंप्यूटर]], [[मिनी कंप्यूटर]] और [[माइक्रो]] कंप्यूटर के लिएCके संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में काफी वृद्धि होने लगी थी।


1983 में, अमेरिकी राष्ट्रीय मानक संस्थान (ANSI) ने यूनिक्स कार्यान्वयन परCमानक के आधार पर C. X3J11 के मानक विनिर्देश स्थापित करने के लिए समिति, X3J11 का गठन किया; चूंकि, यूनिक्सCलाइब्रेरी के गैर-पोर्टेबल हिस्से को 1988 के [[POSIX]] मानक का आधार बनने के लिए [[इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स]] वर्किंग ग्रुप 1003 को सौंप दिया गया था। 1989 में,Cमानक को ANSI X3.159-1989 प्रोग्रामिंग भाषाCके रूप में अनुमोदित किया गया था। भाषा के इस संस्करण को अक्सर ANSI C, Standard C, या कभी-कभी C89 के रूप में संदर्भित किया जाता है।
1990 में, ANSIC स्टैंडर्ड स्वरूपण परिवर्तनों के साथ को अंतर्राष्ट्रीय स्टैंडर्डीकरण संगठन (ISO) द्वारा ISO/IEC 9899:1990 के रूप में अपनाया गया था, जिसे कभी-कभी C 90 कहा जाता है। इसलिए, C 89 और C 90 शब्द ही प्रोग्रामिंग भाषा को संदर्भित करते हैं।


1990 में, ANSICमानक (स्वरूपण परिवर्तनों के साथ) को अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) द्वारा ISO/IEC 9899:1990 के रूप में अपनाया गया था, जिसे कभी-कभी C90 कहा जाता है। इसलिए, C89 और C90 शब्द ही प्रोग्रामिंग भाषा को संदर्भित करते हैं।
ANSI, अन्य राष्ट्रीय स्टैंडर्ड निकायों की प्रकार , अब C स्टैंडर्ड को स्वतंत्र रूप से विकसित नहीं करता है, किन्तु कार्य समूह ISO/IEC JTC 1/SC 22/WG14 द्वारा बनाए गए अंतर्राष्ट्रीय C स्टैंडर्ड को टाल देता है। अंतरराष्ट्रीय स्टैंडर्ड के लिए अद्यतन का राष्ट्रीय अंगीकरण सामान्यतः ISO प्रकाशन के वर्ष के भीतर होता है।


ANSI, अन्य राष्ट्रीय मानक निकायों की तरह, अबCमानक को स्वतंत्र रूप से विकसित नहीं करता है, लेकिन कार्य समूह ISO/IEC JTC1/SC22/WG14 द्वारा बनाए गए अंतर्राष्ट्रीयCमानक को टाल देता है। अंतरराष्ट्रीय मानक के लिए अद्यतन का राष्ट्रीय अंगीकरण आम तौर पर आईएसओ प्रकाशन के वर्ष के भीतर होता है।
C स्टैंडर्डीकरण प्रक्रिया के उद्देश्यों में से K और R C C के उत्तम चयन का निर्माण करना था, जिसमें बाद में प्रारंभ की गई अनौपचारिक सुविधाओं में से कई सम्मलित थे। स्टैंडर्ड समिति में कई अतिरिक्त सुविधाएँ भी सम्मलित हैं जैसे कि [[फ़ंक्शन प्रोटोटाइप|फ़ंक्शन प्रोटोप्ररूप]] C ++ से उद्धृत लिया गया , <code>void</code> सूचक , अंतर्राष्ट्रीय वर्ण कूट लेखन और स्थान कंप्यूटर सॉफ़्टवेयर और पूर्वप्रक्रमक वृद्धि के लिए समर्थन। चूंकि पैरामीटर घोषणा ओं के लिए C वाक्य-विन्यास को C ++ में उपयोगी की जाने वाली शैली को सम्मलित करने के लिए संवर्धित किया गया था, उपस्तिथा स्रोत संकेत के साथ संगतता के लिए K और R C अंतराफलक की अनुमति प्रस्तुत रही हैं।


Cमानकीकरण प्रक्रिया के उद्देश्यों में से के एंड आरCके [[सुपरसेट]] का निर्माण करना था, जिसमें बाद में शुरू की गई अनौपचारिक सुविधाओं में से कई शामिल थे। मानक समिति में कई अतिरिक्त सुविधाएँ भी शामिल हैं जैसे कि [[फ़ंक्शन प्रोटोटाइप]] (C++ से उधार लिया गया), <code>void</code> पॉइंटर्स, अंतर्राष्ट्रीय वर्ण एन्कोडिंग और लोकेल (कंप्यूटर सॉफ़्टवेयर), और प्रीप्रोसेसर एन्हांसमेंट के लिए समर्थन। चूंकि पैरामीटर घोषणाओं के लिएCसिंटैक्स कोC++ में उपयोगी की जाने वाली शैली को शामिल करने के लिए संवर्धित किया गया था, मौजूदा स्रोत कोड के साथ संगतता के लिए के एंड आर इंटरफ़ेस की अनुमति जारी रही।
C 89 वर्तमानC संकलक द्वारा समर्थित है, और अधिकांश आधुनिक C संकेत इस पर आधारित है। कोई भी प्रोग्राम केवल स्टैंडर्ड C में लिखा गया है और अतिरिक्त किसी हार्डवेयर-निर्भर धारणा के किसी भी [[कम्प्यूटिंग मंच]] पर अनुरूप C कार्यान्वयन के साथ, इसकी संसाधन सीमा के भीतर सही ढंग से चलेगा। ऐसी सावधानियों के अतिरिक्त , प्रोग्राम केवल निश्चित प्लेटफॉर्म पर या किसी विशेष संकलक के साथ संकलित हो सकते हैं, उदाहरण के लिए, A-स्टैंडर्ड लाइब्रेरी के उपयोग के लिए जैसे कि [[ग्राफिकल यूज़र इंटरफ़ेस|ग्राफिकल उपयोगकर्ता]] अंतराफलक लाइब्रेरी, या संकलक - या प्लेटफॉर्म-विशिष्ट पर निर्भरता विशेषताएँ जैसे कि डेटा प्रकारों का त्रुटिहीन आकार और बाइट [[endianness|अंत में]] किया जाता हैं।


C89 वर्तमानCसंकलक द्वारा समर्थित है, और अधिकांश आधुनिकCकोड इस पर आधारित है। कोई भी प्रोग्राम केवल मानकCमें लिखा गया है और बिना किCहार्डवेयर-निर्भर धारणा के किCभी [[कम्प्यूटिंग मंच]] पर अनुरूपCकार्यान्वयन के साथ, इसकी संसाधन सीमा के भीतर सही ढंग से चलेगा। ऐCसावधानियों के बिना, प्रोग्राम केवल निश्चित प्लेटफॉर्म पर या किCविशेष कंपाइलर के साथ संकलित हो सकते हैं, उदाहरण के लिए, गैर-मानक पुस्तकालयों के उपयोग के लिए, जैसे कि [[ग्राफिकल यूज़र इंटरफ़ेस]] लाइब्रेरी, या कंपाइलर- या प्लेटफॉर्म-विशिष्ट पर निर्भरता विशेषताएँ जैसे कि डेटा प्रकारों का सटीक आकार और बाइट [[endianness]]।
ऐसे स्थितियों में जहां संकेत को स्टैंडर्ड-अनुरूप K और R C आधारित संकलनकर्ता द्वारा संकलित किया जाना चाहिए, <code>__STDC __</code> केवल स्टैंडर्ड C में उपलब्ध सुविधाओं के K और R C आधारित संकलक पर उपयोग को रोकने के लिए मैक्रो का उपयोग स्टैंडर्ड और K और R C वर्गों में संकेत को विभाजित करने के लिए किया जा सकता है।


ऐसे मामलों में जहां कोड को मानक-अनुरूप या के एंड आर सी-आधारित कंपाइलरों द्वारा संकलित किया जाना चाहिए, <code>__STDC__</code> केवल मानक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}}


ANSI/ISO मानकीकरण प्रक्रिया के बाद,Cभाषा विनिर्देश कई वर्षों तक अपेक्षाकृत स्थिर रहा। 1995 में, 1990Cमानक (ISO/IEC 9899/AMD1:1995, अनौपचारिक रूप से C95 के रूप में जाना जाता है) के लिए मानक संशोधन 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>
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 संकलनकर्ता रूप में लागू किए गए थे।


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 ===
{{Main|C99}}
{{Main|C11 (C मानक संशोधन)}}
1990 के दशक के अंत मेंCमानक को और संशोधित किया गया, जिससे 1999 में ISO/IEC 9899:1999 का प्रकाशन हुआ, जिसे सामान्यतः [[C99]] कहा जाता है। तब से इसे तकनीकी शुद्धिपत्र द्वारा तीन बार संशोधित किया गया है।<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>
C99 ने कई नई सुविधाएँ पेश कीं, जिनमें [[इनलाइन फ़ंक्शन]], कई नए [[डेटा प्रकार]] (सहित <code>long long int</code> और ए <code>complex</code> [[जटिल संख्या]]ओं का प्रतिनिधित्व करने के लिए टाइप करें), चर-लंबाई सरणियों और लचीले सरणी सदस्यों, [[IEEE 754]] फ़्लोटिंग पॉइंट के लिए बेहतर समर्थन, वैरिएडिक मैक्रोज़ के लिए समर्थन (चर [[arity]] के मैक्रोज़), और -पंक्ति टिप्पणियों के साथ शुरू होने के लिए समर्थन <code>//</code>, जैसे बीसीपीएल या सी++ में। इनमें से कई पहले से ही कईCकंपाइलर्स में ्सटेंशन के रूप में लागू किए गए थे।


C99 अधिकांश भाग के लिए C90 के साथ संगत है, लेकिन कुछ मायनों में सख्त है; विशेष रूप से, घोषणा जिसमें प्रकार के विनिर्देशक का अभाव है, अब नहीं है <code>int</code> परोक्ष रूप से मान लिया। मानक मैक्रो <code>__STDC_VERSION__</code> मान से परिभाषित किया गया है <code>199901L</code> यह इंगित करने के लिए कि C99 समर्थन उपलब्ध है। [[जीएनयू संकलक संग्रह]], [[सन स्टूडियो (सॉफ्टवेयर)]], और अन्यCसंकलक अब{{when|date=August 2022}} C99 की कई या सभी नई सुविधाओं का समर्थन करें। [[Microsoft Visual C++]] मेंCकंपाइलर, हालाँकि, C89 मानक और C99 के उन हिस्सों को लागू करता है जो [[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>{{outdated-inline|date=February 2021}}
2007 में,C स्टैंडर्ड और संशोधन पर कार्य प्रारंभ हुआ, जिसे अनौपचारिक रूप से C 1X कहा जाता है। जब तक कि 2011-12-08 को ISO/IEC 9899:2011 का आधिकारिक प्रकाशन नहीं हो गया।C स्टैंडर्ड समिति ने उन नई विशेषताओं को अपनाने की सीमा तय करने के लिए दिशा-निर्देशों को अपनाया जिनका उपस्तिथा कार्यान्वयनों द्वारा परीक्षण नहीं किया गया था।
इसके अलावा, मानक{{which|date=November 2022}} बचने वाले पात्रों के रूप में यूनिकोड पहचानकर्ताओं (चर/फ़ंक्शन नाम) के लिए समर्थन की आवश्यकता है (उदा। {{code|\U0001f431}}) और अपरिष्कृत यूनिकोड नामों के लिए समर्थन का सुझाव देता है।


=== सी11 ===
C 11 स्टैंडर्डC और लाइब्रेरी में कई नई सुविधाएँ जोड़ता है, जिसमें प्ररूप जेनेरिक मैक्रोज़, अनाम संरचनाएँ, श्रेष्ठतर यूनिसंकेत समर्थन, परमाणु संचालन, बहु- थ्रेडिंग और सीमा-जांच कार्य सम्मलित हैं। यह उपस्तिथा C 99 लाइब्रेरी के कुछ अंशों को वैकल्पिक भी बनाता है और C ++ के साथ संगतता में सुधार करता है। स्टैंडर्ड मैक्रो <code>__STDC _VERSION__</code> की प्रकार परिभाषित किया गया है <code>201112L</code> यह इंगित करने के लिए कि C 11 समर्थन उपलब्ध है।
{{Main|C11 (C standard revision)}}
2007 में,Cमानक के और संशोधन पर काम शुरू हुआ, जिसे अनौपचारिक रूप से C1X कहा जाता है, जब तक कि 2011-12-08 को ISO/IEC 9899:2011 का आधिकारिक प्रकाशन नहीं हो गया।Cमानक समिति ने उन नई विशेषताओं को अपनाने की सीमा तय करने के लिए दिशा-निर्देशों को अपनाया जिनका मौजूदा कार्यान्वयनों द्वारा परीक्षण नहीं किया गया था।


C11 मानकCऔर लाइब्रेरी में कई नई सुविधाएँ जोड़ता है, जिसमें टाइप जेनेरिक मैक्रोज़, अनाम संरचनाएँ, बेहतर यूनिकोड समर्थन, परमाणु संचालन, बहु-थ्रेडिंग और सीमा-जांच कार्य शामिल हैं। यह मौजूदा C99 लाइब्रेरी के कुछ अंशों को वैकल्पिक भी बनाता है, और C++ के साथ संगतता में सुधार करता है। मानक मैक्रो <code>__STDC_VERSION__</code> की तरह परिभाषित किया गया है <code>201112L</code> यह इंगित करने के लिए कि C11 समर्थन उपलब्ध है।
=== C17 ===
{{Main|C17 (C मानक संशोधन)}}


=== सी17 ===
जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C 17 सी प्रोग्रामिंग भाषा के लिए वर्तमान स्टैंडर्ड है। यह C 11 में दोषों के लिए कोई नई भाषा सुविधाएँ केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। स्टैंडर्ड मैक्रो <code>__STDC _VERSION__</code> की प्रकार परिभाषित किया गया है <code>201710L</code>.
{{Main|C17 (C standard revision)}}
जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C17Cप्रोग्रामिंग भाषा के लिए वर्तमान मानक है। यह C11 में दोषों के लिए कोई नई भाषा सुविधाएँ, केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। मानक मैक्रो <code>__STDC_VERSION__</code> की तरह परिभाषित किया गया है <code>201710L</code>.


=== सी2 ्स ===
=== C2 ===
{{Main|C2x}}
{{Main|C2x}}
C2x अगले (C17 के बाद) प्रमुखCभाषा मानक संशोधन के लिए अनौपचारिक नाम है। इसके 2023 में मतदान होने की उम्मीद है और इसलिए इसे C23 कहा जाएगा।<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>{{better source needed|date=October 2021}}
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>




=== एंबेडेड सी ===
{{Main|Embedded C}}
ऐतिहासिक रूप से, एम्बेडेडCप्रोग्रामिंग कोCभाषा के लिए गैर-मानक ्सटेंशन की आवश्यकता होती है ताकि फिक्स्ड-पॉइंट अंकगणित, कई अलग-अलग मेमोरी बैंक और बुनियादी I/O संचालन जैCविदेशी विशेषताओं का समर्थन किया जा सके।


2008 में,Cमानक समिति ने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 हार्डवेयर एड्रेसिंग।
=== अंतर्निहित C ===
{{Main|अंतर्निहित C}}
 
ऐतिहासिक रूप से, अंतर्निहित सी प्रोग्रामिंग को सी भाषा के लिए अ-स्टैंडर्ड की आवश्यकता होती है जिससे कि नियत बिन्दु अंकगणित, कई अलग-अलग मेमोरी बैंक और आधारभूत I/O संचालन जैसी विदेशी विशेषताओं का समर्थन किया जा सके।
 
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 syntax}}
{{Main|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>, या (C99 के बाद से) निम्नलिखित <code>//</code> पंक्ति के अंत तक। द्वारा सीमांकित टिप्पणियाँ <code>/*</code> तथा <code>*/</code> घोंसला न करें, और वर्णों के इन अनुक्रमों को टिप्पणी सीमांकक के रूप में व्याख्या नहीं किया जाता है यदि वे स्ट्रिंग शाब्दिक या वर्ण शाब्दिक के अंदर दिखाई देते हैं।{{sfnp|Kernighan|Ritchie|1988|p=192}}
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 स्रोत फ़ाइलों में घोषणाएँ और फ़ंक्शन परिभाषाएँ होती हैं। फ़ंक्शन परिभाषाएँ, बदले में, घोषणाएँ और कथन (कंप्यूटर विज्ञान) शामिल करती हैं। घोषणाएँ या तो कीवर्ड का उपयोग करके नए प्रकारों को परिभाषित करती हैं जैसे <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> स्टेटमेंट में अलग-अलग इनिशियलाइज़ेशन, टेस्टिंग और रीइनिशियलाइज़ेशन ्सप्रेशन हैं, जिनमें से कोई भी या सभी को छोड़ा जा सकता है। <code>break</code> तथा <code>continue</code> अंतरतम संलग्न लूप स्टेटमेंट को छोड़ने के लिए उपयोगी किया जा सकता है या इसके पुनर्संरचना पर जा सकता है। गैर-संरचित भी है <code>[[goto]]</code> बयान जो फ़ंक्शन के भीतर सीधे निर्दिष्ट [[लेबल (कंप्यूटर विज्ञान)]] को शाखा करता है। <code>switch</code> का चयन करता है <code>case</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> विवरण में अलग-अलग आरंभीकरण , टेस्टिंग और आरंभीकरण हैं, जिनमें से कोई भी या सभी को छोड़ा जा सकता है। <code>break</code> तथा <code>Continue</code> अंतरतम संलग्न लूप विवरण को छोड़ने के लिए उपयोगी किया जा सकता है या इसके पुनर्संरचना पर जा सकता है। -संरचित भी है <code>[[goto]]</code> विवरण जो फ़ंक्शन के भीतर सीधे निर्दिष्ट [[लेबल (कंप्यूटर विज्ञान)]] को शाखा करता है। <code>switch</code> A का चयन करता है <code>Case</code> पूर्णांक अभिव्यक्ति के मूल्य के आधार पर निष्पादित किया जाना है।


भाव विभिन्न प्रकार के अंतर्निर्मित ऑपरेटरों का उपयोग कर सकते हैं और इसमें फ़ंक्शन कॉल हो सकते हैं। वह क्रम जिसमें अधिकांश ऑपरेटरों के लिए फ़ंक्शन और ऑपरेंड के तर्कों का मूल्यांकन किया जाता है, अनिर्दिष्ट है। मूल्यांकनों को आपस में जोड़ा भी जा सकता है। चूंकि, सभी दुष्प्रभाव (भंडारण से चर सहित) अगले [[अनुक्रम बिंदु]] से पहले होंगे; अनुक्रम बिंदुओं में प्रत्येक अभिव्यक्ति कथन का अंत, और प्रत्येक फ़ंक्शन कॉल में प्रवेश और वापCशामिल है। कुछ ऑपरेटरों वाले भावों के मूल्यांकन के पर्यन्त अनुक्रम बिंदु भी होते हैं (<code>&&</code>, <code>||</code>, <code>[[?:]]</code> और अल्पविराम ऑपरेटर)। यह संकलक द्वारा उच्च स्तर के ऑब्जेक्ट कोड अनुकूलन की अनुमति देता है, लेकिनCप्रोग्रामर को अन्य प्रोग्रामिंग भाषाओं की तुलना में विश्वसनीय परिणाम प्राप्त करने के लिए अधिक ध्यान देने की आवश्यकता होती है।
भाव विभिन्न प्रकार के अंतर्निर्मित ऑपरेटरों का उपयोग कर सकते हैं और इसमें फ़ंक्शन कॉल हो सकते हैं। वह क्रम जिसमें अधिकांश ऑपरेटरों के लिए फ़ंक्शन और ऑपरेंड के तर्कों का मूल्यांकन किया जाता है, अनिर्दिष्ट है। मूल्यांकनों को आपस में जोड़ा भी जा सकता है। चूंकि, सभी दुष्प्रभाव भंडारण से चर सहित अगले [[अनुक्रम बिंदु]] से पहले होंगे अनुक्रम बिंदुओं में प्रत्येक अभिव्यक्ति कथन का अंत, और प्रत्येक फ़ंक्शन कॉल में प्रवेश और वापसी सम्मलित है। कुछ ऑपरेटरों वाले भावों के मूल्यांकन के पर्यन्त अनुक्रम बिंदु भी होते हैं (<code>&&</code>, <code>||</code>, <code>[[?:]]</code> और अल्पविराम ऑपरेटर। यह संकलक द्वारा उच्च स्तर के प्रयोजन संकेत अनुकूलन की अनुमति देता है, किन्तु C प्रोग्राम को अन्य प्रोग्रामिंग भाषाओं की तुलना में विश्वसनीय परिणाम प्राप्त करने के लिए अधिक ध्यान देने की आवश्यकता होती है।


कर्निघन और रिचीCप्रोग्रामिंग भाषा के परिचय में कहते हैं: सी, किCभी अन्य भाषा की तरह, इसके दोष हैं। कुछ ऑपरेटरों की गलत प्राथमिकता है; सिंटैक्स के कुछ हिस्से बेहतर हो सकते हैं।{{sfnp|Kernighan|Ritchie|1978|p=3}} पहले से मौजूद सॉफ़्टवेयर पर ऐसे परिवर्तनों के प्रभाव के कारणCमानक ने इनमें से कई दोषों को ठीक करने का प्रयास नहीं किया।
कर्निघन और रिची सी प्रोग्रामिंग भाषा के परिचय में कहते हैं, C, किसी भी अन्य भाषा की प्रकार इसके दोष हैं। कुछ ऑपरेटरों की गलत प्राथमिकता है वाक्य-विन्यास के कुछ भाग श्रेष्ठतर हो सकते हैं।{{sfnp|Kernighan|Ritchie|1978|p=3}} पहले से उपस्तिथ सॉफ़्टवेयर पर ऐसे परिवर्तनों के प्रभाव के कारण C स्टैंडर्ड ने इनमें से कई दोषों को ठीक करने का प्रयास नहीं किया।


=== कैरेक्टर सेट ===
=== अक्षर समुच्चय ===
मूलCस्रोत वर्ण सेट में निम्नलिखित वर्ण शामिल हैं:
मूल C स्रोत वर्ण चयन में निम्नलिखित वर्ण सम्मलित हैं:


* आईएसओ बेसिक लैटिन वर्णमाला के लोअरकेस और अपरकेस अक्षर: <code>a</code>–<code>z</code> <code>A</code>–<code>Z</code>
* ISO मूलभूत लैटिन वर्णमाला के छोटे और बड़े अक्षर: <code>a</code>–<code>z</code> <code>A</code>–<code>Z</code>
* दशमलव अंक: <code>0</code>–<code>9</code>
* दशमलव अंक: <code>0</code>–<code>9</code>
* ग्राफिक वर्ण: <code>! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~</code>
* ग्राफिक वर्ण: <code>! " # % & ' ( ) * + , - . / : < = > ? [ \ ] ^ _ { | } ~</code>
* व्हॉट्सएप कैरेक्टर: स्पेस (विराम चिह्न), [[टैब वर्ण]], टैब कैरेक्टर, [[पृष्ठ विराम]], [[नई पंक्ति]]
* व्हॉट्सएप कैरेक्टर: स्पेस (विराम चिह्न), [[टैब वर्ण]], टैब कैरेक्टर, [[पृष्ठ विराम]], [[नई पंक्ति]]


न्यूलाइन टेक्स्ट लाइन के अंत को इंगित करता है; यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिएCइसे के रूप में मानता है।
नई पंक्ति विवरण पंक्ति के अंत को इंगित करता है यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिए C इसे के रूप में मानता है।


अतिरिक्त बहु-बाइट एन्कोडेड वर्ण स्ट्रिंग अक्षर में उपयोग किए जा सकते हैं, लेकिन वे पूरी तरह से सॉफ़्टवेयर सुवाह्यता नहीं हैं। नवीनतमCमानक (सी11 (Cमानक संशोधन)) बहु-राष्ट्रीय यूनिकोड वर्णों को उपयोग करकेCस्रोत पाठ के भीतर आंशिक रूप से एम्बेड करने की अनुमति देता है <code>\uXXXX</code> या <code>\UXXXXXXXX</code> एन्कोडिंग (जहां <code>X</code> हेक्साडेसिमल चरित्र को दर्शाता है), चूंकि यह सुविधा अभी तक व्यापक रूप से लागू नहीं हुई है।
अतिरिक्त बहु-बाइट एन्कोडेड वर्ण स्ट्रिंग अक्षर में उपयोग किए जा सकते हैं, किन्तु वे पूरी प्रकार से सॉफ़्टवेयर सुवाह्यता नहीं हैं। नवीनतम C स्टैंडर्ड C11, C स्टैंडर्ड संशोधन बहु-राष्ट्रीय यूनिसंकेत वर्णों को उपयोग करके C स्रोत पाठ के भीतर आंशिक रूप से लागू करने की अनुमति देता है <code>\uXXXX</code> या <code>\UXXXXXXXX</code> कूट लेखन जहां <code>X</code> हेक्साडेसिमल चरित्र को दर्शाता है, चूंकि यह सुविधा अभी तक व्यापक रूप से लागू नहीं हुई है।


मूलCनिष्पादन चरित्र सेट में बेल चरित्र, [[backspace]] और [[कैरिज रिटर्न]] के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। रन टाइम (प्रोग्राम जीवनचक्र चरण) |Cमानक के प्रत्येक संशोधन के साथ विस्तारित वर्ण सेट के लिए रन-टाइम समर्थन बढ़ गया है।
मूल C निष्पादन चरित्र चयन में बेल चरित्र, [[Backspace]] और [[कैरिज रिटर्न|कैरिज वापसी]] के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। चलाने का समय प्रोग्राम जीवनचक्र चरण | C स्टैंडर्ड के प्रत्येक संशोधन के साथ विस्तारित वर्ण चयन के लिए क्रम समर्थन बढ़ गया है।


=== आरक्षित शब्द ===
=== आरक्षित शब्द ===
C89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अलावा किCअन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं:
C 89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अतिरिक्त किसी अन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं:


{{div col|colwidth=13em}}
{{div col|colwidth=13em}}* <code>auto</code>
* <code>auto</code>
* <code>[[break statement|break]]</code>
* <code>[[break statement|break]]</code>
* <code>case</code>
* <code>case</code>
* <code>char</code>
* <code>four</code>
* <code>[[const (computer programming)|const]]</code>
* <code> [[const (computer programming) | const]]
* <code>[[Continue (keyword)|continue]]</code>
* <code>[[continue(keyword)|continue]]</code>
* <code>default</code>
* <code>default</code>
* <code>do</code>
* <code>do</code>
* <code>[[double precision|double]]</code>
* [[double precision | double]]
* <code>[[Conditional (computer programming)|else]]</code>
* <code>[[conditional (computer programming)|other]]</code>
* <code>[[enumerated type|enum]]</code>
* <code> [[enumerated type | enum]]
* <code>[[external variable|extern]]</code>
* [[extern variable | outer]]
* <code>[[floating-point arithmetic|float]]</code>
* [[floating-point arithmetic | float]]
* <code>[[for loop|for]]</code>
* [[for loop | for]]
* <code>[[goto]]</code>
* [[goto]] </code>
* <code>[[Conditional (computer programming)|if]]</code>
* <code>[[conditional (computer programming)|if]]</code>
* <code>[[Integer (computer science)|int]]</code>
* <code>[[Integer (Computer Science)|int]]</code>
* <code>[[long integer|long]]</code>
* [[long int | long]]
* <code>[[register (C programming language)|register]]</code>
* <code>[[register (C programming language)|register]]</code>
* <code>return</code>
* <code>return</code>
* <code>[[short integer|short]]</code>
* [[short int | short]]
* <code>[[Signed number representations|signed]]</code>
* <code>[[unsigned number representation|unsigned]]</code>
* <code>[[sizeof]]</code>
* <code> [[size]] </code>
* <code>[[Static (keyword)|static]]</code>
* <code> [[static(keyword) | static]]
* <code>[[struct (C programming language)|struct]]</code>
* <code> [[struct (C programming language) | struct]]
* <code>[[switch statement|switch]]</code>
* <code>[[switch statement|switch]]</code>
* <code>typedef</code>
* <code>typedef</code>
* <code>union</code>
* <code>union</code>
* <code>[[Signed number representations|unsigned]]</code>
* [[ unsigned number representation | unsigned]]
* <code>[[void type|void]]</code>
* [[void type | void]]
* <code>[[volatile variable|volatile]]</code>
* <code>[[volatile variable|volatile]]</code>
* <code>[[while loop|while]]</code>
* [[while loop | while]]{{div col end}}<blockquote>
{{div col end}}
C 99 ने पांच और शब्द आरक्षित किए:
C99 ने पांच और शब्द आरक्षित किए:


{{div col|colwidth=13em}}
{{div col|colwidth=13em}}* <code>_bool</code>
* <code>_Bool</code>
* <code> [[complex data type|_complex]]</code>
* <code>[[Complex data type|_Complex]]</code>
* <code>[[complex data type|_hypothetical]]</code>
* <code>[[Complex data type|_Imaginary]]</code>
* <code> [[inline function | inline]]
* <code>[[Inline function|inline]]</code>
* <code> [[restrict]] </code>{{div col end}}
* <code>[[restrict]]</code>
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 end}}
C11 ने सात और शब्द आरक्षित किए:<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>_Alignas</code>
* <code>_Alignof</code>
* <code>_Alignof</code>
* <code>_Atomic</code>
* <code>_atom</code>
* <code>_Generic</code>
* <code>_normal</code>
* <code>_Noreturn</code>
* <code>_no return</code>
* <code>_Static_assert</code>
* _static_assert
* <code>_Thread_local</code>
* <code>_caste_local</code>{{div col end}}
{{div col end}}
हाल ही में आरक्षित अधिकांश शब्द अंडरस्कोर के साथ शुरू होते हैं, जिसके बाद कैपिटल लेटर होता है, क्योंकि उस फॉर्म के पहचानकर्ता पहलेCमानक द्वारा केवल कार्यान्वयन के उपयोग के लिए आरक्षित थे। चूंकि मौजूदा प्रोग्राम स्रोत कोड को इन पहचानकर्ताओं का उपयोग नहीं करना चाहिए था, यह तब प्रभावित नहीं होगा जबCकार्यान्वयन प्रोग्रामिंग भाषा में इन ्सटेंशनों का समर्थन करना शुरू कर दें। कुछ मानक शीर्षलेख अंडरस्कोर किए गए पहचानकर्ताओं के लिए अधिक सुविधाजनक समानार्थक शब्द परिभाषित करते हैं। भाषा में पहले आरक्षित शब्द शामिल था जिसे कहा जाता था <code>entry</code>, लेकिन यह शायद ही कभी लागू किया गया था, और अब है{{when|date=August 2022}} आरक्षित शब्द के रूप में हटा दिया गया है।{{sfnp|Kernighan|Ritchie|1988|pp=192, 259}}
 


जल्दी में आरक्षित अधिकांश शब्द अंडरस्कोर( _ ) के साथ प्रारंभ होते हैं, जिसके बाद बड़ा अक्षर होता है, क्योंकि उस फॉर्म के पहचानकर्ता पहले C मानक द्वारा केवल कार्यान्वयन के उपयोग के लिए आरक्षित थे। चूंकि उपस्तिथा प्रोग्राम स्रोत संकेत को इन पहचानकर्ताओं का उपयोग नहीं करना चाहिए था, यह तब प्रभावित नहीं होगा जब C कार्यान्वयन प्रोग्रामिंग भाषा में इनका समर्थन करना प्रारंभ कर दें। कुछ मानक शीर्षलेख अंडरस्कोर किए गए पहचानकर्ताओं के लिए अधिक सुविधाजनक समानार्थक शब्द परिभाषित करते हैं। भाषा में पहले आरक्षित शब्द सम्मलित था जिसे कहा जाता था <code>entry</code>, किन्तुयह संभवतः ही कभी लागू किया गया था, और अब है आरक्षित शब्द के रूप में हटा दिया गया है।{{sfnp|Kernighan|Ritchie|1988|pp=192, 259}}
=== ऑपरेटर ===
=== ऑपरेटर ===
{{Main|Operators in C and C++}}
{{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>
* [[संवर्धित असाइनमेंट]]: {{codes|+{{=}}|-{{=}}|*{{=}}|/{{=}}|%{{=}}|&{{=}}|{{!}}{{=}}|^{{=}}|&lt;&lt;{{=}}|&gt;&gt;{{=}}|d=,{{space}}}}
* [[संवर्धित असाइनमेंट|संवर्धित कार्यभार]]:
* [[बिटवाइज़ ऑपरेशन]]: <code>~</code>, <code>&</code>, <code>|</code>, <code>^</code>
* [[बिटवाइज़ ऑपरेशन]]: <code>~</code>, <code>&</code>, <code>|</code>, <code>^</code>
* [[बिट शिफ्ट]]: <code>&lt;&lt;</code>, <code>&gt;&gt;</code>
* [[बिट शिफ्ट|अंश शिफ्ट]]: <code>&lt;&lt;</code>, <code>&gt;&gt;</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>[[sizeof]]</code>
* वस्तु का आकार: <code>[[sizeof]]</code>
* [[आदेश सिद्धांत]]: <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>
* [[आदेश सिद्धांत]]: <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>
* सूचक (कंप्यूटर प्रोग्रामिंग): <code>&</code>, <code>*</code>, <code>[ ]</code>
* सूचक (कंप्यूटर प्रोग्रामिंग): <code>&</code>, <code>*</code>, <code>[ ]</code>
* सीक्वेंसिंग: कॉमा ऑपरेटर|<code>,</code>* संचालन का क्रम # प्रोग्रामिंग भाषाएँ: <code>( )</code>
* अनुक्रमण : कॉमा ऑपरेटर|<code>,</code>* संचालन का क्रम # प्रोग्रामिंग भाषाएँ: <code>( )</code>
* प्रकार रूपांतरण: <code>(''typename'')</code>
* प्रकार रूपांतरण: <code>(''typename'')</code>
Cऑपरेटर का उपयोग करता है <code>=</code> (गणित में समानता व्यक्त करने के लिए प्रयोग किया जाता है) [[फोरट्रान]] और पीएल/आई के उदाहरण के बाद, असाइनमेंट को इंगित करने के लिए, लेकिन एएलजीओएल और इसके डेरिवेटिव के विपरीत।Cऑपरेटर का उपयोग करता है <code>==</code> समानता के लिए परीक्षण करने के लिए। इन दो ऑपरेटरों (असाइनमेंट और समानता) के बीच समानता के परिणामस्वरूप दूसरे के स्थान पर का आकस्मिक उपयोग हो सकता है, और कई मामलों में, गलती त्रुटि संदेश उत्पन्न नहीं करती है (चूंकि कुछ कंपाइलर चेतावनियां उत्पन्न करते हैं)। उदाहरण के लिए, सशर्त अभिव्यक्ति <code>if (a == b + 1)</code> गलती से लिखा जा सकता है <code>if (a = b + 1)</code>, जिसका मूल्यांकन सत्य के रूप में किया जाएगा यदि <code>a</code> असाइनमेंट के बाद शून्य नहीं है।<ref name="AutoTX-8">{{cite web |url=http://www.cs.ucr.edu/~nxiao/cs10/errors.htm |title=C++ में 10 कॉमन प्रोग्रामिंग मिस्टेक्स|publisher=Cs.ucr.edu |access-date=June 26, 2009 |archive-date=October 21, 2008 |archive-url=https://web.archive.org/web/20081021080953/http://www.cs.ucr.edu/~nxiao/cs10/errors.htm |url-status=live }}</ref>
C ऑपरेटर का उपयोग करता है <code>=</code> गणित में समानता व्यक्त करने के लिए प्रयोग किया जाता है। [[फोरट्रान]] और PL/I के उदाहरण के बाद, कार्यभार को इंगित करने के लिए, किन्तुएएलजीओएल और इसके डेरिवेटिव के विपरीत C ऑपरेटर का उपयोग करता है। <code>==</code> समानता के लिए परीक्षण करने के लिए। इन दो ऑपरेटरों कार्यभार और समानता के बीच समानता के परिणामस्वरूप दूसरे के स्थान पर का आकस्मिक उपयोग हो सकता है और कई स्थितियों में गलती त्रुटि संदेश उत्पन्न नहीं करती है, चूंकि कुछ संकलक चेतावनियां उत्पन्न करते हैं। उदाहरण के लिए, प्रतिबंधात्मक अभिव्यक्ति <code>if (a == b + 1)</code> गलती से लिखा जा सकता है <code>if (a = b + 1)</code>, जिसका मूल्यांकन सत्य के रूप में किया जाएगा यदि <code>a</code> कार्यभार के बाद शून्य नहीं है।<ref name="AutoTX-8">{{cite web |url=http://www.cs.ucr.edu/~nxiao/cs10/errors.htm |title=C++ में 10 कॉमन प्रोग्रामिंग मिस्टेक्स|publisher=Cs.ucr.edu |access-date=June 26, 2009 |archive-date=October 21, 2008 |archive-url=https://web.archive.org/web/20081021080953/http://www.cs.ucr.edu/~nxiao/cs10/errors.htm |url-status=live }}</ref>संचालन का C क्रम सदैव सहज नहीं होता है। उदाहरण के लिए, ऑपरेटर <code>==</code> ऑपरेटरों की तुलना में अधिक कसकर बांधता है पहले निष्पादित किया गया है। <code>&</code> (बिटवाइज ) और <code>|</code> (बिटवाइज़) जैसे भावों में <code>x & 1 == 0</code>, जिसे इस रूप में लिखा जाना चाहिए <code>(x & 1) == 0</code> यदि वह कोडर का प्रयोजन है।<ref name="AutoTX-9">{{cite book |title=सी और 8051|edition=3rd |last1=Schultz |first1=Thomas |year=2004 |publisher=PageFree Publishing Inc. |location=Otsego, MI |isbn=978-1-58961-237-2 |page=20 |url=https://books.google.com/books?id=rI0c8kWbxooC&pg=PT47 |access-date=February 10, 2012 |archive-date=July 29, 2020 |archive-url=https://web.archive.org/web/20200729185742/https://books.google.com/books?id=rI0c8kWbxooC&pg=PT47 |url-status=live }}</ref>
संचालन काCक्रम हमेशा सहज नहीं होता है। उदाहरण के लिए, ऑपरेटर <code>==</code> ऑपरेटरों की तुलना में अधिक कसकर बांधता है (पहले निष्पादित किया गया है)। <code>&</code> (बिटवाइज एंड) और <code>|</code> (बिटवाइज़ OR) जैसे भावों में <code>x & 1 == 0</code>, जिसे इस रूप में लिखा जाना चाहिए <code>(x & 1) == 0</code> अगर वह कोडर का इरादा है।<ref name="AutoTX-9">{{cite book |title=सी और 8051|edition=3rd |last1=Schultz |first1=Thomas |year=2004 |publisher=PageFree Publishing Inc. |location=Otsego, MI |isbn=978-1-58961-237-2 |page=20 |url=https://books.google.com/books?id=rI0c8kWbxooC&pg=PT47 |access-date=February 10, 2012 |archive-date=July 29, 2020 |archive-url=https://web.archive.org/web/20200729185742/https://books.google.com/books?id=rI0c8kWbxooC&pg=PT47 |url-status=live }}</ref>
 
 
 




== {{anchor|HELLOWORLD}}हैलो, विश्व उदाहरण ==
[[File:Hello World Brian Kernighan 1974.jpg|thumb|नमस्ते दुनिया! ब्रायन कर्निघन द्वारा कार्यक्रम (1978)]]
{{See also|Hello, world}}
हैलो, दुनिया! प्रोग्राम|हैलो, दुनिया का उदाहरण, जो दCप्रोग्रामिंग भाषा|केएंडआर के पहले संस्करण में दिखाई दिया, अधिकांश प्रोग्रामिंग पाठ्यपुस्तकों में परिचयात्मक कार्यक्रम के लिए मॉडल बन गया है। कार्यक्रम हैलो, वर्ल्ड को [[मानक आउटपुट]] पर प्रिंट करता है, जो सामान्यतः टर्मिनल या स्क्रीन डिस्प्ले होता है।


मूल संस्करण था:{{sfnp|Kernighan|Ritchie|1978|p=6}}
<वाक्यविन्यास प्रकाश लैंग = सी>
मुख्य()
{
  प्रिंटफ (हैलो, दुनिया\n);
}
</वाक्यविन्यास हाइलाइट>


मानक-अनुरूप हैलो, विश्व कार्यक्रम है:{{Efn|The original example code will compile on most modern compilers that are not in strict standard compliance mode, but it does not fully conform to the requirements of either C89 or C99. In fact, C99 requires that a diagnostic message be produced.}}


<!-- READ THIS BEFORE YOU EDIT! If you think there is a better way, first see talk page archive No. 8 for why. If you still want to change it, discuss it first.
-->
<वाक्यविन्यास प्रकाश लैंग = सी>
#शामिल <stdio.h>


पूर्णांक मुख्य (शून्य)
{
  प्रिंटफ (हैलो, दुनिया\n);
}
</वाक्यविन्यास हाइलाइट>


कार्यक्रम की पहली पंक्ति में [[पूर्वप्रक्रमक]] होता है, जिसे द्वारा दर्शाया जाता है <code>#include</code>. यह संकलक को उस पंक्ति को पूरे पाठ के साथ बदलने का कारण बनता है <code>[[stdio.h]]</code> मानक शीर्षलेख, जिसमें मानक इनपुट और आउटपुट फ़ंक्शंस जैसे घोषणाएं शामिल हैं <code>printf</code> तथा <code>scanf</code>. आसपास के कोण कोष्ठक <code>stdio.h</code> संकेत मिलता है कि <code>stdio.h</code> खोज रणनीति का उपयोग करके स्थित है जो समान नाम वाले अन्य हेडर के लिए कंपाइलर के साथ प्रदान किए गए हेडर को पसंद करता है, जो दोहरे उद्धरण चिह्नों के विपरीत होता है जिसमें सामान्यतः स्थानीय या प्रोजेक्ट-विशिष्ट हेडर फाइलें शामिल होती हैं।


अगली पंक्ति इंगित करती है कि फ़ंक्शन नाम दिया गया है <code>main</code> परिभाषित किया जा रहा है। <code>[[main function (programming)|main]]</code> ई> फ़ंक्शनCकार्यक्रमों में विशेष उद्देश्य प्रदान करता है; रन-टाइम वातावरण कॉल करता है <code>main</code> कार्यक्रम निष्पादन शुरू करने के लिए कार्य। प्रकार विनिर्देशक <code>int</code> इंगित करता है कि मूल्य जो कि मूल्यांकन के परिणामस्वरूप आवेदक (इस मामले में रन-टाइम पर्यावरण) को वापस कर दिया गया है <code>main</code> समारोह, पूर्णांक है। कीवर्ड <code>void</code> पैरामीटर सूची के रूप में इंगित करता है कि यह फ़ंक्शन कोई तर्क नहीं लेता है।{{Efn|The <code>main</code> function actually has two arguments, <code>int argc</code> and <code>char *argv[]</code>, respectively, which can be used to handle [[command line arguments]].  The ISO C standard (section 5.1.2.2.1) requires both forms of <code>main</code> to be supported, which is special treatment not afforded to any other function.}}
ओपनिंग कर्ली ब्रेस परिभाषा की शुरुआत को इंगित करता है <code>main</code> समारोह।


अगली पंक्ति नाम के फ़ंक्शन को कॉल करती है (निष्पादन को मोड़ती है)। <code>[[printf]]</code>, जो इस मामले में सिस्टम लाइब्रेरी (कंप्यूटिंग) से आपूर्ति की जाती है। इस कॉल में, <code>printf</code> फ़ंक्शन पारित किया जाता है (बशर्ते) ल तर्क, स्ट्रिंग शाब्दिक में पहले वर्ण का पता <code>"hello, world\n"</code>. स्ट्रिंग शाब्दिक प्रकार के तत्वों के साथ अनाम सरणी डेटा प्रकार है <code>char</code>, सरणी के अंत को चिह्नित करने के लिए अंतिम 0-मूल्यवान वर्ण के साथ संकलक द्वारा स्वचालित रूप से सेट किया गया (<code>printf</code> इसे जानने की जरूरत है)। <code>\n</code> e>Cमें C[[सी में भागने के क्रम|में भागने के क्रम]]Cन्यूलाइन कैरेक्टर में ट्रांसलेट करता है, जो आउटपुट पर करंट लाइन के अंत को दर्शाता है। का वापCमूल्य <code>printf</code> कार्य प्रकार का होता है <code>int</code>, लेकिन इसे चुपचाप त्याग दिया जाता है क्योंकि इसका उपयोग नहीं किया जाता है। ( अधिक सावधान कार्यक्रम यह निर्धारित करने के लिए रिटर्न वैल्यू का परीक्षण कर सकता है कि <code>printf</code> समारोह सफल हुआ।) अर्धविराम <code>;</code> कथन समाप्त करता है।


समापन कर्ली ब्रेस के लिए कोड के अंत को इंगित करता है <code>main</code> समारोह। C99 विनिर्देश और नए के अनुसार, <code>main</code> फ़ंक्शन, किCभी अन्य फ़ंक्शन के विपरीत, निश्चित रूप से का मान लौटाएगा <code>0</code> पहुँचने पर <code>}</code> जो कार्य को समाप्त करता है। (पूर्व में स्पष्ट <code>return 0;</code> कथन आवश्यक था।) इसे रन-टाइम सिस्टम द्वारा सफल निष्पादन का संकेत देने वाले निकास कोड के रूप में समझा जाता है।<ref name="bk21st">{{cite book |last1=Klemens |first1=Ben |author-link=Ben Klemens |title=21वीं सदी सी|publisher=[[O'Reilly Media]] |year=2013 |isbn=978-1-4493-2714-9}}</ref>




== डेटा प्रकार ==
== डेटा प्रकार ==
{{Main|C variable types and declarations}}
{{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>).
{{More citations needed section|date=October 2012}}
 


[[File:1999 ISO C Concepts.png|thumb]]C में टाइप सिस्टम स्टैटिक टाइपिंग और कमजोर टाइपिंग है, जो इसे [[पास्कल (प्रोग्रामिंग भाषा)]] जैसे ALGOL वंशजों के टाइप सिस्टम के समान बनाता है।<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> अक्सर सिंगल-बाइट वर्णों के लिए प्रयोग किया जाता है। C99 ने [[बूलियन डेटाटाइप]] जोड़ा। एरे डेटा प्रकार, पॉइंटर (कंप्यूटर प्रोग्रामिंग), रिकॉर्ड (कंप्यूटर विज्ञान) सहित व्युत्पन्न प्रकार भी हैं (<code>[[Struct (C programming language)|struct]]</code>), और संघ (कंप्यूटर विज्ञान) (<code>union</code>).


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


कुछ लोगCके डिक्लेरेशन सिंटैक्स को विशेष रूप से [[समारोह सूचक]] के लिए अनपेक्षित पाते हैं। (रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था: [[घोषणा उपयोग को दर्शाती है]]।){{sfnp|Kernighan|Ritchie|1988|p=122}}
C का उपयोग अधिकांशतः निम्न-स्तरीय प्रणाली प्रोग्रामिंग में किया जाता है, जहाँ प्ररूप प्रणाली से बचना आवश्यक हो सकता है। संकलक अधिकांश प्रकार की शुद्धता सुनिश्चित करने का प्रयास करता है, किन्तु प्रोग्रामर विभिन्न तरीकों से चेक को अवहेलना कर सकता है, तो दूसरे प्रकार से मूल्य को स्पष्ट रूप से रूपांतरित करने के लिए सूचक या यूनियनों का उपयोग करके अंतर्निहित बिट्स की पुनर्व्याख्या करने के लिए डेटा प्रयोजन का किसी अन्य विधि से हैं।
Cके सामान्य अंकगणितीय रूपांतरण कुशल कोड उत्पन्न करने की अनुमति देते हैं, लेकिन कभी-कभी अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए, समान चौड़ाई के हस्ताक्षरित और अहस्ताक्षरित पूर्णांकों की तुलना के लिए हस्ताक्षरित मान को अहस्ताक्षरित में बदलने की आवश्यकता होती है। यदि हस्ताक्षरित मान ऋणात्मक है तो यह अनपेक्षित परिणाम उत्पन्न कर सकता है।


=== पॉइंटर्स ===
कुछ लोगC के घोषणा वाक्य-विन्यास को विशेष रूप से [[समारोह सूचक|फंक्शन सूचक]] के लिए अनपेक्षित पाते हैं। रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था , [[घोषणा उपयोग को दर्शाती है]]।{{sfnp|Kernighan|Ritchie|1988|p=122}} C के सामान्य अंकगणितीय रूपांतरण कुशल संकेत उत्पन्न करने की अनुमति देते हैं, किन्तु कभी-कभी अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए, समान चौड़ाई के हस्ताक्षरित और अहस्ताक्षरित पूर्णांकों की तुलना के लिए हस्ताक्षरित मान को अहस्ताक्षरित में बदलने की आवश्यकता होती है। यदि हस्ताक्षरित मान ऋणात्मक है तो यह अनपेक्षित परिणाम उत्पन्न कर सकता है।
Cपॉइंटर (कंप्यूटर प्रोग्रामिंग) के उपयोग का समर्थन करता है, प्रकार का [[संदर्भ (कंप्यूटर विज्ञान)]] जो मेमोरी में किCऑब्जेक्ट या फ़ंक्शन का पता या स्थान रिकॉर्ड करता है। पॉइंटर्स को इंगित किए गए पते पर संग्रहीत डेटा तक पहुंचने के लिए, या पॉइंट-टू-फ़ंक्शन का आह्वान करने के लिए संदर्भित किया जा सकता है। असाइनमेंट या पॉइंटर अंकगणित का उपयोग करके पॉइंटर्स में हेरफेर किया जा सकता है। पॉइंटर मान का रन-टाइम प्रतिनिधित्व आम तौर पर कच्चा मेमोरी एड्रेस होता है (शायद ऑफ़सेट-इन-वर्ड फ़ील्ड द्वारा संवर्धित), लेकिन चूंकि पॉइंटर के प्रकार में इंगित की गई चीज़ का प्रकार शामिल होता है, पॉइंटर्स सहित ्सप्रेशन को टाइप-चेक किया जा सकता है संकलन समय पर। पॉइंटर अंकगणित स्वचालित रूप से पॉइंट-टू-डेटा प्रकार के आकार से स्केल किया जाता है।


Cमें कई उद्देश्यों के लिए पॉइंटर्स का उपयोग किया जाता है। स्ट्रिंग (कंप्यूटर विज्ञान) को सामान्यतः वर्णों के सरणियों में पॉइंटर्स का उपयोग करके हेरफेर किया जाता है। डायनेमिक मेमोरी आवंटन पॉइंटर्स का उपयोग करके किया जाता है; ए का परिणाम <code>malloc</code> सामान्यतः संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे [[पेड़ (डेटा संरचना)]], सामान्यतः गतिशील रूप से आवंटित किए जाते हैं <code>struct</code> पॉइंटर्स का उपयोग करके साथ जुड़ी हुई वस्तुएं। पॉइंटर्स टू अन्य पॉइंटर्स का उपयोग अक्सर बहु-आयामी सरणियों और सरणियों में किया जाता है <code>struct</code> वस्तुओं। फ़ंक्शंस के पॉइंटर्स (फ़ंक्शन पॉइंटर्स) [[प्रेषण तालिका]] में उच्च-क्रम फ़ंक्शंस (जैसे [[qsort]] या [[bsearch]]) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या [[कॉलबैक (कंप्यूटर विज्ञान)]] के रूप में Event_(computing)#Event_handler ।<ref name="bk21st" />
=== सूचक ===
C सूचक कंप्यूटर प्रोग्रामिंग के उपयोग का समर्थन करता है, [[संदर्भ (कंप्यूटर विज्ञान)]] का प्रकार जो मेमोरी में किसी प्रयोजन या फ़ंक्शन का पता या स्थान अभिलेख करता है। सूचक को इंगित किए गए पते पर संग्रहीत डेटा तक पहुंचने के लिए या आह्वान करने के लिए संदर्भित किया जा सकता है। कार्यभार या सूचकअंकगणित का उपयोग करके सूचक में कार्यसाधन किया जा सकता है। सूचकमान का क्रम प्रतिनिधित्व सामान्यतः कच्चा मेमोरी पता होता है संभवतः शब्द क्षेत्र में ऑफचयन द्वारा संवर्धित, किन्तु चूंकि सूचक के प्रकार में इंगित की गई वस्तु का प्रकार सम्मलित होता है, सूचक सहित प्ररूप-चेक किया जा सकता है संकलन समय पर सूचक अंकगणित स्वचालित रूप सेइंगित -डेटा प्रकार के आकार से स्तर किया जाता है।


शून्य सूचक मान स्पष्ट रूप से किCमान्य स्थान की ओर इशारा नहीं करता है। अशक्त सूचक मान को अपरिभाषित करना अपरिभाषित है, जिसके परिणामस्वरूप अक्सर विभाजन दोष होता है। अशक्त सूचक मान विशेष मामलों को इंगित करने के लिए उपयोगी होते हैं जैसे कि लिंक की गई सूची के अंतिम नोड में कोई अगला सूचक नहीं है, या फ़ंक्शन रिटर्निंग पॉइंटर्स से त्रुटि संकेत के रूप में। स्रोत कोड में उपयुक्त संदर्भों में, जैसे कि सूचक चर को निर्दिष्ट करने के लिए, शून्य सूचक स्थिरांक को इस रूप में लिखा जा सकता है <code>0</code>, के साथ या सूचक प्रकार के लिए स्पष्ट कास्टिंग के बिना, या के रूप में <code>NULL</code> कई मानक शीर्षलेखों द्वारा परिभाषित मैक्रो। सशर्त संदर्भों में, अशक्त सूचक मान असत्य का मूल्यांकन करते हैं, जबकि अन्य सभी सूचक मान सत्य का मूल्यांकन करते हैं।
C में कई उद्देश्यों के लिए सूचक का उपयोग किया जाता है। स्ट्रिंग कंप्यूटर विज्ञान को सामान्यतः वर्णों के सरणी यों में सूचक का उपयोग करके कार्य साधन किया जाता है। गतिशील मेमोरी आवंटन सूचक का उपयोग करके किया जाता है A का परिणाम <code>malloc</code> सामान्यतः संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे [[पेड़ (डेटा संरचना)]], सामान्यतः गतिशील रूप से आवंटित किए जाते हैं <code>struct</code> सूचक का उपयोग करके साथ जुड़ी हुई वस्तुएं। सूचक अन्य सूचक का उपयोग अधिकांशतः बहु-आयामी सरणी यों और सरणी यों में किया जाता है <code>struct</code> वस्तुओं। फ़ंक्शन के सूचक (फ़ंक्शन सूचक ) [[प्रेषण तालिका]] में उच्च-क्रम फ़ंक्शन (जैसे [[qsort|क्यूसॉर्ट]] या [[bsearch|Bखोज]] ) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या [[कॉलबैक (कंप्यूटर विज्ञान)]] के रूप में Event_(C omputing)#Event_handler ।<ref name="bk21st" />


शून्य संकेतक (<code>void *</code>) अनिर्दिष्ट प्रकार की वस्तुओं को इंगित करता है, और इसलिए सामान्य डेटा पॉइंटर्स के रूप में उपयोग किया जा सकता है। चूँकि पॉइंट-टू-ऑब्जेक्ट का आकार और प्रकार ज्ञात नहीं है, शून्य पॉइंटर्स को डीरेफ़रेंस नहीं किया जा सकता है, न ही उन पर पॉइंटर अंकगणित की अनुमति है, हालाँकि वे आसानी से (और कई संदर्भों में निहित हैं) किCअन्य ऑब्जेक्ट पॉइंटर से परिवर्तित हो सकते हैं। प्रकार।<ref name="bk21st" />
शून्य सूचक मान स्पष्ट रूप से किसी मान्य स्थान की ओर संकेत नहीं करता है। अशक्त सूचक मान को अपरिभाषित करना अपरिभाषित है, जिसके परिणामस्वरूप अधिकांशतः विभाजन दोष होता है। अशक्त सूचक मान विशेष स्थितियोंको इंगित करने के लिए उपयोगी होते हैं जैसे कि संपर्क की गई सूची के अंतिम नोड में कोई अगला सूचक नहीं है, फ़ंक्शन वापसी सूचक से त्रुटि संकेत के रूप में। स्रोत संकेत में उपयुक्त संदर्भों में, जैसे कि सूचक चर को निर्दिष्ट करने के लिए, शून्य सूचक स्थिरांक को इस रूप में लिखा जा सकता है <code>0</code>, के साथ या सूचक प्रकार के लिए स्पष्ट कास्टिंग के अतिरिक्त रूप में <code>NULL</code> कई मानक शीर्षलेखों द्वारा परिभाषित मैक्रो। प्रतिबंधात्मक संदर्भों में, अशक्त सूचक मान असत्य का मूल्यांकन करते हैं, चूँकि अन्य सभी सूचक मान सत्य का मूल्यांकन करते हैं।


पॉइंटर्स का लापरवाह उपयोग संभावित रूप से खतरनाक है। क्योंकि वे आम तौर पर अनियंत्रित होते हैं, किCभी मनमाने स्थान को इंगित करने के लिए सूचक चर बनाया जा सकता है, जो अवांछनीय प्रभाव पैदा कर सकता है। चूंकि उचित रूप से उपयोग किए गए पॉइंटर्स सुरक्षित स्थानों की ओर इशारा करते हैं, उन्हें अमान्य पॉइंटर अंकगणित का उपयोग करके असुरक्षित स्थानों की ओर इशारा किया जा सकता है; वे जिन वस्तुओं की ओर इशारा करते हैं, वे डीलोकेशन (झूलने वाले संकेत) के बाद भी उपयोगी की जा सकती हैं; उनका उपयोग आरंभ किए बिना किया जा सकता है (वाइल्ड पॉइंटर्स); या उन्हें कास्ट, यूनियन, या किCअन्य भ्रष्ट सूचक के माध्यम से सीधे असुरक्षित मान असाइन किया जा सकता है। सामान्य तौर पर,Cसूचक प्रकारों के बीच हेरफेर और रूपांतरण की अनुमति देने में अनुज्ञेय है, चूंकि संकलक सामान्यतः जाँच के विभिन्न स्तरों के लिए विकल्प प्रदान करते हैं। कुछ अन्य प्रोग्रामिंग भाषाएँ अधिक प्रतिबंधात्मक संदर्भ (कंप्यूटर विज्ञान) प्रकारों का उपयोग करके इन समस्याओं का समाधान करती हैं।
शून्य संकेतक (<code>void *</code>) अनिर्दिष्ट प्रकार की वस्तुओं को इंगित करता है और इसलिए सामान्य डेटा सूचक के रूप में उपयोग किया जा सकता है। चूँकि इंगित -प्रयोजन का आकार और प्रकार ज्ञात नहीं है, शून्य सूचक को भिन्नता नहीं किया जा सकता है, न ही उन पर सूचक अंकगणित की अनुमति है, चूँकि वे आसानी से और कई संदर्भों में निहित हैं किसी अन्य प्रयोजन सूचकसे परिवर्तित हो सकते हैं।<ref name="bk21st" />


=== सरणियाँ ===
सूचक का लापरवाह उपयोग संभावित रूप से खतरनाक है। क्योंकि वे सामान्यतः अनियंत्रित होते हैं, किसी भी मनमाने स्थान को इंगित करने के लिए सूचक चर बनाया जा सकता है, जो अवांछनीय प्रभाव उत्पन्न कर सकता है। चूंकि उचित रूप से उपयोग किए गए सूचक सुरक्षित स्थानों की ओर संकेत करते हैं, उन्हें अमान्य सूचकअंकगणित का उपयोग करके असुरक्षित स्थानों की ओर संकेत किया जा सकता है वे जिन वस्तुओं की ओर संकेत करते हैं, वे विस्थापन (झूलने वाले संकेत) के बाद भी उपयोगी की जा सकती हैं उनका उपयोग आरंभ किए अतिरिक्त किया जा सकता है (वाइल्ड सूचक ) या उन्हें कास्ट, यूनियन, या किसी अन्य भ्रष्ट सूचक के माध्यम से सीधे असुरक्षित मान निर्धारण किया जा सकता है। सामान्यतः,C सूचक प्रकारों के बीच कार्यसाधन और रूपांतरण की अनुमति देने में अनुज्ञेय है, चूंकि संकलक सामान्यतः जाँच के विभिन्न स्तरों के लिए विकल्प प्रदान करते हैं। कुछ अन्य प्रोग्रामिंग भाषाएँ अधिक प्रतिबंधात्मक संदर्भ कंप्यूटर विज्ञान प्रकारों का उपयोग करके इन समस्याओं का समाधान करती हैं।
{{See also|C string}}
<!-- Please be careful when editing this.  C does *not* forbid bounds checking, nor does it require that pointers are memory addresses.  Of course it does not require bounds checks, either, and all common implementations map those language constructs to the machine in an "obvious way", but there are ANSI-conforming implementations that handle these things in other ways. -->
Cमें ऐरे डेटा प्रकार प्रकार परंपरागत रूप से संकलन समय पर निर्दिष्ट निश्चित, स्थिर आकार के होते हैं। अधिक हालिया C99 मानक भी चर-लंबाई सरणियों के रूप की अनुमति देता है। चूंकि, मानक पुस्तकालय का उपयोग करके, रन-टाइम पर स्मृति का ब्लॉक (मनमाने आकार का) आवंटित करना भी संभव है <code>malloc</code> कार्य करें, और इसे सरणी के रूप में मानें।


चूंकि सरणियों को हमेशा पॉइंटर्स के माध्यम से (वास्तव में) ्सेस किया जाता है, इसलिए एरे ्सेस को सामान्यतः अंतर्निहित सरणी आकार के विरुद्ध चेक नहीं किया जाता है, चूंकि कुछ कंपाइलर विकल्प के रूप में [[सीमा जाँच]] प्रदान कर सकते हैं।<ref name="fedoraproject">For example, gcc provides _FORTIFY_SOURCE. {{cite web |url=http://fedoraproject.org/wiki/Security/Features |title=Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE) |publisher=fedoraproject.org |access-date=August 5, 2012 |archive-date=January 7, 2007 |archive-url=https://web.archive.org/web/20070107153447/http://fedoraproject.org/wiki/Security/Features |url-status=live }}</ref><ref name="सी के साथ प्रोग्रामिंग">{{Cite book|title=सी के साथ प्रोग्रामिंग|last1=เอี่ยมสิริวงศ์|first1=โอภาศ|publisher=SE-EDUCATION PUBLIC COMPANY LIMITED|year=2016|isbn=978-616-08-2740-4|location=Bangkok, Thailand|pages=225–230}}</ref> इसलिए ऐरे सीमा का उल्लंघन संभव है और अवैध मेमोरी ्सेस, डेटा का भ्रष्टाचार, [[बफ़र अधिकता]] और रन-टाइम अपवाद सहित विभिन्न नतीजों का कारण बन सकता है।
=== सरणीयाँ ===
{{See also|C स्ट्रिंग}}


C के पास बहु-आयामी सरणियों को घोषित करने के लिए कोई विशेष प्रावधान नहीं है, बल्कि सरणियों के सरणियों को घोषित करने के लिए टाइप सिस्टम के भीतर रिकर्सन (कंप्यूटर विज्ञान) पर निर्भर करता है, जो प्रभावी रूप से ही चीज़ को पूरा करता है। परिणामी बहु-आयामी सरणी के सूचकांक मूल्यों को [[पंक्ति-प्रमुख क्रम]] में वृद्धि के रूप में माना जा सकता है। मैट्रिक्स को स्टोर करने के लिए बहु-आयामी सरणियों का उपयोग सामान्यतः संख्यात्मक एल्गोरिदम (मुख्य रूप से लागू रैखिक बीजगणित से) में किया जाता है।Cसरणी की संरचना इस विशेष कार्य के लिए उपयुक्त है। चूंकि,Cके शुरुआती संस्करणों में सरणी की सीमाओं को निश्चित मान ज्ञात होना चाहिए या अन्यथा किCभी सबरूटीन को स्पष्ट रूप से पारित किया जाना चाहिए, और गतिशील रूप से आकार के सरणियों को डबल सूचीिंग का उपयोग करके ्सेस नहीं किया जा सकता है। (इसके लिए वर्कअराउंड एरे को कॉलम में पॉइंटर्स के अतिरिक्त पंक्ति वेक्टर के साथ आवंटित करना था।) C99 ने चर-लंबाई सरणियों को पेश किया जो इस मुद्दे को संबोधित करते हैं।
C में सरणी डेटा प्रकार प्रकार परंपरागत रूप से संकलन समय पर निर्दिष्ट निश्चित, स्थिर आकार के होते हैं। अधिक C 99 मानक भी चर-लंबाई सरणी यों के रूप की अनुमति देता है। चूंकि, मानक पुस्तकालय का उपयोग करके, क्रम पर स्मृति का खंड मनमाने आकार का आवंटित करना भी संभव है <code>malloc</code> कार्य करें और इसे सरणी के रूप में मानें।


आधुनिकC(C99 या बाद में) का उपयोग करने वाला निम्न उदाहरण हीप पर द्वि-आयामी सरणी का आवंटन और ्सेस के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है (जो कईCकंपाइलर्स पर सीमा-जांच का उपयोग कर सकता है):
चूंकि सरणी यों को सदैव सूचक के माध्यम से वास्तव में अभिगम किया जाता है, इसलिए सरणी अभिगम को सामान्यतः अंतर्निहित सरणी आकार के विरुद्ध चेक नहीं किया जाता है, चूंकि कुछ संकलक विकल्प के रूप में [[सीमा जाँच]] प्रदान कर सकते हैं।<ref name="fedoraproject">For example, gcc provides _FORTIFY_SOURCE. {{cite web |url=http://fedoraproject.org/wiki/Security/Features |title=Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE) |publisher=fedoraproject.org |access-date=August 5, 2012 |archive-date=January 7, 2007 |archive-url=https://web.archive.org/web/20070107153447/http://fedoraproject.org/wiki/Security/Features |url-status=live }}</ref><ref name="सी के साथ प्रोग्रामिंग">{{Cite book|title=सी के साथ प्रोग्रामिंग|last1=เอี่ยมสิริวงศ์|first1=โอภาศ|publisher=SE-EDUCATION PUBLIC COMPANY LIMITED|year=2016|isbn=978-616-08-2740-4|location=Bangkok, Thailand|pages=225–230}}</ref> इसलिए सरणी सीमा का उल्लंघन संभव है और अवैध मेमोरी अभिगम, डेटा का भ्रष्टाचार, [[बफ़र अधिकता|अंतर्रोधी अधिकता]] और क्रम अपवाद सहित विभिन्न परिणाम का कारण बन सकता है।
<वाक्यविन्यास प्रकाश लैंग = सी>
 
इंट फंक (इंट एन, इंट एम)
C के पास बहु-आयामी सरणी यों को घोषित करने के लिए कोई विशेष प्रावधान नहीं है, जबकि सरणीयों को घोषित करने के लिए प्ररूप प्रणाली के भीतर रिकर्सन कंप्यूटर विज्ञान पर निर्भर करता है। जो प्रभावी रूप से ही वस्तु को पूरा करता है। परिणामी बहु-आयामी सरणी के सूचकांक मूल्यों को [[पंक्ति-प्रमुख क्रम]] में वृद्धि के रूप में माना जा सकता है। आव्यूह को स्टोर करने के लिए बहु-आयामी सरणी यों का उपयोग सामान्यतः संख्यात्मक कलन विधि मुख्य रूप से लागू रैखिक बीजगणित में किया जाता है। C सरणी की संरचना इस विशेष कार्य के लिए उपयुक्त है। चूंकि,C के प्रारंभिक संस्करणों में सरणी की सीमाओं को निश्चित मान ज्ञात होना चाहिए। अन्यथा किसी भी उप-दैनिकि को स्पष्ट रूप से पारित किया जाना चाहिए और गतिशील रूप से आकार के सरणीयों को दोहरा सूची का उपयोग करके अभिगम नहीं किया जा सकता है। इसके लिए आसपास कार्य करो सरणी को स्तंभ में सूचक के अतिरिक्त पंक्ति वेक्टर के साथ आवंटित करना था। C 99 ने चर-लंबाई सरणी यों को प्रस्तुत किया जो इस मुद्दे को संबोधित करते हैं।
{
 
  फ्लोट (* पी) [एन] [एम] = मॉलोक (आकार * पी);
आधुनिक C 99 बाद में का उपयोग करने वाला निम्न उदाहरण संचय पर द्वि-आयामी सरणी का आवंटन और अभिगम के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है जो कई C संकलनकर्ता पर सीमा-जांच का उपयोग कर सकता है। <वाक्यविन्यास प्रकाश लैंग = सी>इंट फंक (इंट एन, इंट एम){
  अगर (! पी)
 
  वापC-1;
int func(int N, int M)
  के लिए (int i = 0; i <एन; i++)
{
  के लिए (इंट जे = 0; जे <एम; जे ++)
  float (*p)[N][M] = malloc(sizeof *p);
  (*p)[i][j] = i + j;
  if (!p)
  Print_array (एन, एम, पी);
    return -1;
  मुक्त (पी);
  for (int i = 0; i < N; i++)
  वापC1;
    for (int j = 0; j < M; j++)
      (*p)[i][j] = i + j;
  print_array(N, M, p);
  free(p);
  return 1; 
}
}
</वाक्यविन्यास हाइलाइट>


और यहाँ C99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है:
और यहाँ C 99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है।<वाक्यविन्यास प्रकाश लैंग = सी>
<वाक्यविन्यास प्रकाश लैंग = सी>
इंट फंक (इंट एन, इंट एम){
इंट फंक (इंट एन, इंट एम)
int func(int N, int M)
{
 
  // सावधानी: यह सुनिश्चित करने के लिए जांच की जानी चाहिए कि N*M*sizeof(float) ऑटो वीएलए के लिए सीमाओं से अधिक नहीं है और स्टैक के उपलब्ध आकार के भीतर है।
{
  फ्लोट पी [एन] [एम]; // ऑटो वीएलए को स्टैक पर आयोजित किया जाता है, और फ़ंक्शन लागू होने पर आकार दिया जाता है
  // 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.
  के लिए (int i = 0; i <एन; i++)
  float p[N][M]; // auto VLA is held on the stack, and sized when the function is invoked
  के लिए (इंट जे = 0; जे <एम; जे ++)
  for (int i = 0; i < N; i++)
  पी [मैं] [जे] = मैं + जे;
    for (int j = 0; j < M; j++)
  // मुक्त करने की कोई आवश्यकता नहीं है (पी) क्योंकि यह स्टैक फ्रेम के बाकी हिस्सों के साथ फ़ंक्शन से बाहर निकलने पर गायब हो जाएगा
      p[i][j] = i + j;
  वापC1;
  // 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>), सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किCफ़ंक्शन के तर्क के रूप में नामित होने पर किCसरणी को पूरी तरह से कॉपी नहीं किया जाता है, बल्कि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, चूंकिCमें फ़ंक्शन कॉल [[कॉल-टू-मूल्य से]] | पास-बाय-वैल्यू शब्दार्थ का उपयोग करते हैं, सरणियाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं।
इसके अतिरिक्त, अधिकांश अभिव्यक्ति संदर्भों में उल्लेखनीय अपवाद के संकार्य के रूप में है <code>[[sizeof]]</code>, सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किसी फ़ंक्शन के तर्क के रूप में नामित होने पर किसी सरणी को पूरी प्रकार से प्रतिलिपि नहीं किया जाता है, जबकि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, किसी फ़ंक्शन में [[कॉल-टू-मूल्य से]] | पास-बाय-मूल्यशब्दार्थ का उपयोग करते हैं, सरणीयाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं।


सरणी का कुल आकार <code>x</code> आवेदन करके निर्धारित किया जा सकता है <code>sizeof</code> सरणी प्रकार की अभिव्यक्ति के लिए। ऑपरेटर को लागू करके किCतत्व का आकार निर्धारित किया जा सकता है <code>sizeof</code> किCसरणी के किCभी संदर्भित तत्व के लिए <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 संकेत में होता है क्योंकि ऊपर वर्णित स्वचालित रूपांतरण के कारण, सरणी के पूर्ण प्रकार और इसकी लंबाई के बारे में जानकारी खो जाती है।


== स्मृति प्रबंधन ==
== स्मृति प्रबंधन ==
प्रोग्रामिंग भाषा के सबसे महत्वपूर्ण कार्यों में से कंप्यूटर मेमोरी और मेमोरी में संग्रहीत वस्तुओं के प्रबंधन के लिए सुविधाएं प्रदान करना है।Cवस्तुओं के लिए स्मृति आवंटित करने के तीन प्रमुख तरीके प्रदान करता है:<ref name="bk21st" />* [[स्थैतिक स्मृति आवंटन]]: संकलन-समय पर बाइनरी में वस्तु के लिए स्थान प्रदान किया जाता है; इन वस्तुओं में वेरिएबल (प्रोग्रामिंग) # स्कोप और सीमा (या आजीवन) होती है जब तक कि बाइनरी जिसमें उन्हें मेमोरी में लोड किया जाता है।
प्रोग्रामिंग भाषा के सबसे महत्वपूर्ण कार्यों में से कंप्यूटर मेमोरी और मेमोरी में संग्रहीत वस्तुओं के प्रबंधन के लिए सुविधाएं प्रदान करना है। C वस्तुओं के लिए स्मृति आवंटित करने के तीन प्रमुख विधि प्रदान करता है:<ref name="bk21st" />* [[स्थैतिक स्मृति आवंटन]]: संकलन-समय पर बाइनरी में वस्तु के लिए स्थान प्रदान किया जाता है इन वस्तुओं में चर प्रोग्रामिंग विस्तारऔर सीमा आजीवन होती है जब तक कि बाइनरी जिसमें उन्हें मेमोरी में लोड किया जाता है।
* [[स्वचालित मेमोरी आवंटन]]: अस्थायी वस्तुओं को [[कॉल स्टैक]] पर संग्रहीत किया जा सकता है, और यह स्थान स्वचालित रूप से मुक्त हो जाता है और जिस ब्लॉक में उन्हें घोषित किया जाता है, उसके बाहर निकलने के बाद पुन: उपयोग किया जाता है।
* [[स्वचालित मेमोरी आवंटन]] अस्थायी वस्तुओं को [[कॉल स्टैक]] पर संग्रहीत किया जा सकता है और यह स्थान स्वचालित रूप से मुक्त हो जाता है और जिस खंड में उन्हें घोषित किया जाता है, उसके बाहर निकलने के बाद पुन: उपयोग किया जाता है।
* डायनेमिक मेमोरी आवंटन: मनमाना आकार की मेमोरी के ब्लॉक को लाइब्रेरी फ़ंक्शंस जैसे रन-टाइम पर अनुरोध किया जा सकता है <code>[[malloc]]</code> स्मृति के क्षेत्र से गतिशील स्मृति आवंटन कहा जाता है; ये ब्लॉक तब तक बने रहते हैं जब तक कि लाइब्रेरी फ़ंक्शन को कॉल करके पुन: उपयोग के लिए मुक्त नहीं कर दिया जाता <code>[[malloc|realloc]]</code> या <code>[[malloc|free]]</code>
* गतिशील मेमोरी आवंटन: मनमाना आकार की मेमोरी के खंड को पुस्तकालय फ़ंक्शन जैसे क्रम पर अनुरोध किया जा सकता है <code>[[malloc|malloC]]</code> स्मृति के क्षेत्र से गतिशील स्मृति आवंटन कहा जाता है ये खंड तब तक बने रहते हैं जब तक कि पुस्तकालय फ़ंक्शन को कॉल करके पुन: उपयोग के लिए मुक्त नहीं कर दिया जाता <code>[[malloc|realloC]]</code> या <code>[[malloc|free]]</code>
ये तीन दृष्टिकोण विभिन्न स्थितियों में उपयुक्त हैं और विभिन्न व्यापार-बंद हैं। उदाहरण के लिए, स्थिर मेमोरी आवंटन में थोड़ा आवंटन ओवरहेड होता है, स्वचालित आवंटन में थोड़ा अधिक ओवरहेड शामिल हो सकता है, और डायनेमिक मेमोरी आवंटन में आवंटन और डीलोकेशन दोनों के लिए संभावित रूप से बहुत अधिक ओवरहेड हो सकता है। स्थैतिक वस्तुओं की निरंतर प्रकृति फ़ंक्शन कॉलों में राज्य की जानकारी को बनाए रखने के लिए उपयोगी होती है, स्वचालित आवंटन का उपयोग करना आसान होता है लेकिन स्टैक स्पेस सामान्यतः स्थिर मेमोरी या हीप स्पेस की तुलना में बहुत अधिक सीमित और क्षणिक होता है, और डायनेमिक मेमोरी आवंटन उन वस्तुओं के सुविधाजनक आवंटन की अनुमति देता है जिनके आकार केवल रन-टाइम पर जाना जाता है। अधिकांशCप्रोग्राम तीनों का व्यापक उपयोग करते हैं।
ये तीन दृष्टिकोण विभिन्न स्थितियों में उपयुक्त हैं और विभिन्न व्यापार-बंद हैं। उदाहरण के लिए, स्थिर मेमोरी आवंटन में थोड़ा आवंटन उपरि होता है। स्वचालित आवंटन में थोड़ा अधिक उपरि सम्मलित हो सकता है और गतिशील मेमोरी आवंटन में आवंटन और विस्थापन दोनों के लिए संभावित रूप से बहुत अधिक उपरि हो सकता है। स्थैतिक वस्तुओं की निरंतर प्रकृति फ़ंक्शन कॉलों में राज्य की जानकारी को बनाए रखने के लिए उपयोगी होती है। स्वचालित आवंटन का उपयोग करना आसान होता है किन्तु, स्टैक स्पेस सामान्यतः स्थिर मेमोरी या संचय स्पेस की तुलना में बहुत अधिक सीमित और क्षणिक होता है, और गतिशील मेमोरी आवंटन उन वस्तुओं के सुविधाजनक आवंटन की अनुमति देता है। जिनके आकार केवल क्रम पर जाना जाता है। अधिकांशC प्रोग्राम तीनों का व्यापक उपयोग करते हैं।


जहां संभव हो, स्वचालित या स्थैतिक आवंटन सामान्यतः सबसे सरल होता है क्योंकि भंडारण को संकलक द्वारा प्रबंधित किया जाता है, संभावित त्रुटि-प्रवण कोर के प्रोग्रामर को मैन्युअल रूप से आवंटित करने और भंडारण जारी करने से मुक्त करता है। चूंकि, क्रम पर कई डेटा संरचनाएं आकार में बदल सकती हैं, और चूंकि स्थिर आवंटन (और C99 से पहले स्वचालित आवंटन) का संकलन-समय पर निश्चित आकार होना चाहिए, ऐCकई स्थितियां हैं जिनमें गतिशील आवंटन आवश्यक है।<ref name="bk21st" /> C99 मानक से पहले, चर-आकार की सरणियाँ इसका सामान्य उदाहरण थीं। (पर लेख देखें <code>[[malloc]]</code> गतिशील रूप से आवंटित सरणियों के उदाहरण के लिए।) स्वचालित आवंटन के विपरीत, जो अनियंत्रित परिणामों के साथ रन टाइम पर विफल हो सकता है, गतिशील आवंटन फ़ंक्शन संकेत देता है (शून्य सूचक मान के रूप में) जब आवश्यक भंडारण आवंटित नहीं किया जा सकता है। (स्टेटिक आवंटन जो बहुत बड़ा है, सामान्यतः लिंकर (कंप्यूटिंग) या [[लोडर (कंप्यूटिंग)]] द्वारा पता लगाया जाता है, इससे पहले कि कार्यक्रम भी निष्पादन शुरू कर सके।)
जहां संभव हो स्वचालित या स्थैतिक आवंटन सामान्यतः सबसे सरल होता है क्योंकि भंडारण को संकलक द्वारा प्रबंधित किया जाता है, संभावित त्रुटि-प्रवण कोर के प्रोग्रामर को नियमावली रूप से आवंटित करने और भंडारण जारी करने से मुक्त करता है। चूंकि, क्रम पर कई डेटा संरचनाएं आकार में बदल सकती हैं। चूंकि स्थिर आवंटन और C 99 से पहले स्वचालित आवंटन का संकलन-समय पर निश्चित आकार होना चाहिए, ऐसी कई स्थितियां हैं जिनमें गतिशील आवंटन आवश्यक है।<ref name="bk21st" /> C 99 मानक से पहले चर-आकार की सरणीयाँ इसका सामान्य उदाहरण थीं। <code>[[malloc|malloC]]</code> गतिशील रूप से आवंटित सरणी यों के उदाहरण के लिए स्वचालित आवंटन के विपरीत हैं। जो अनियंत्रित परिणामों के साथ चलाने का समय पर विफल हो सकता है, गतिशील आवंटन फ़ंक्शन संकेत देता हैं। शून्य सूचक मान के रूप में जब आवश्यक भंडारण आवंटित नहीं किया जा सकता है। स्थिर आवंटन जो बहुत बड़ा है, सामान्यतः लिंकर कंप्यूटिंग या [[लोडर (कंप्यूटिंग)]] द्वारा पता लगाया जाता है, इससे पहले कि कार्यक्रम भी निष्पादन प्रारंभ कर सके।


जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, स्थिर वस्तुओं में प्रोग्राम स्टार्टअप पर शून्य या शून्य सूचक मान होते हैं। स्वचालित रूप से और गतिशील रूप से आवंटित वस्तुओं को केवल तभी प्रारंभ किया जाता है जब प्रारंभिक मान स्पष्ट रूप से निर्दिष्ट किया गया हो; अन्यथा उनके प्रारंभ में अनिश्चित मान होते हैं (सामान्यतः, जो कुछ भी होता है वह [[कंप्यूटर भंडारण]] में मौजूद होता है, जो उस प्रकार के लिए मान्य मान का प्रतिनिधित्व भी नहीं कर सकता है)। यदि प्रोग्राम गैर-प्रारंभिक मान तक पहुँचने का प्रयास करता है, तो परिणाम अपरिभाषित होते हैं। कई आधुनिक संकलक इस समस्या का पता लगाने और इसके बारे में चेतावनी देने का प्रयास करते हैं, लेकिन टाइप I और टाइप II दोनों त्रुटियाँ हो सकती हैं।
जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, स्थिर वस्तुओं में प्रोग्राम प्रचलित होना पर शून्य सूचक मान होते हैं। स्वचालित रूप से और गतिशील रूप से आवंटित वस्तुओं को केवल तभी प्रारंभ किया जाता है जब प्रारंभिक मान स्पष्ट रूप से निर्दिष्ट किया गया हो अन्यथा उनके प्रारंभ में अनिश्चित मान होते हैं सामान्यतः, जो कुछ भी होता है वह [[कंप्यूटर भंडारण]] में उपस्तिथ होता है, जो उस प्रकार के लिए मान्य मान का प्रतिनिधित्व भी नहीं कर सकता है। यदि प्रोग्राम -प्रारंभिक मान तक पहुँचने का प्रयास करता है, तो परिणाम अपरिभाषित होते हैं। कई आधुनिक संकलक इस समस्या का पता लगाने और इसके बारे में चेतावनी देने का प्रयास करते हैं, किन्तु प्ररूप और प्ररूप दोनों त्रुटियाँ हो सकती हैं।


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


== पुस्तकालय ==
== पुस्तकालय ==
C प्रोग्रामिंग भाषा लाइब्रेरी (कंप्यूटिंग) को अपने विस्तार के प्राथमिक तरीके के रूप में उपयोग करती है।Cमें, पुस्तकालय संग्रह फ़ाइल में निहित कार्यों का सेट है। प्रत्येक लाइब्रेरी में सामान्यतः [[हेडर फाइल]] होती है, जिसमें लाइब्रेरी के भीतर निहित फ़ंक्शंस के प्रोटोटाइप होते हैं, जिनका उपयोग प्रोग्राम द्वारा किया जा सकता है, और इन फ़ंक्शंस के साथ उपयोग किए जाने वाले विशेष डेटा प्रकारों और मैक्रो प्रतीकों की घोषणा। लाइब्रेरी का उपयोग करने के लिए प्रोग्राम के लिए, इसमें लाइब्रेरी की हेडर फ़ाइल शामिल होनी चाहिए, और लाइब्रेरी को प्रोग्राम से जोड़ा जाना चाहिए, जिसके लिए कई मामलों में [[संकलक ध्वज]] की आवश्यकता होती है (उदाहरण के लिए, <code>-lm</code>, गणित पुस्तकालय को लिंक करने के लिए आशुलिपि)।<ref name="bk21st" />
सी प्रोग्रामिंग भाषा पुस्तकालय कंप्यूटिंग को अपने विस्तार के प्राथमिक विधि के रूप में उपयोग करती है। C में, पुस्तकालय संग्रह फ़ाइल में निहित कार्यों का चयन है। प्रत्येक पुस्तकालय में सामान्यतः [[हेडर फाइल|प्रवेशिका फाइल]] होती है, जिसमें पुस्तकालय के भीतर निहित फ़ंक्शन के प्रोटोप्ररूप होते हैं, जिनका उपयोग प्रोग्राम द्वारा किया जा सकता है, और इन फ़ंक्शन के साथ उपयोग किए जाने वाले विशेष डेटा प्रकारों और मैक्रो प्रतीकों की घोषणा करती है। पुस्तकालय का उपयोग करने के लिए प्रोग्राम के लिए, इसमें पुस्तकालय की प्रवेशिका फ़ाइल सम्मलित होनी चाहिए, और पुस्तकालय को प्रोग्राम से जोड़ा जाना चाहिए। जिसके लिए कई स्थितियों में [[संकलक ध्वज]] की आवश्यकता होती है उदाहरण के लिए, <code>-lm</code>, गणित पुस्तकालय को संपर्क करने के लिए आशुलिपि।<ref name="bk21st" />
 
सबसे आमCपुस्तकालयCमानक पुस्तकालय है, जो [[आईएसओ मानक]] और एएनएसआईCमानकों द्वारा निर्दिष्ट है और प्रत्येकCकार्यान्वयन के साथ आता है (कार्यान्वयन जो सीमित वातावरण जैसे कि [[अंतः स्थापित प्रणालियाँ]] को लक्षित करता है, मानक पुस्तकालय का केवल सबसेट प्रदान कर सकता है)। यह लाइब्रेरी स्ट्रीम इनपुट और आउटपुट, मेमोरी एलोकेशन, मैथमैटिक्स, कैरेक्टर स्ट्रिंग्स और टाइम वैल्यू को सपोर्ट करती है। कई अलग-अलग मानक शीर्षलेख (उदाहरण के लिए, <code>stdio.h</code>) इन और अन्य मानक पुस्तकालय सुविधाओं के लिए इंटरफेस निर्दिष्ट करें।


Cलाइब्रेरी फ़ंक्शंस का अन्य सामान्य सेट वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैCप्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल (ऑपरेटिंग सिस्टम) को इंटरफ़ेस प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और ल UNIX विशिष्टता में विस्तृत हैं।
सबसे साधारण C मानक पुस्तकालय है, जो [[आईएसओ मानक|ISO मानक]] और ANSIC मानकों द्वारा निर्दिष्ट है और प्रत्येकC कार्यान्वयन के साथ आता है। कार्यान्वयन जो सीमित वातावरण जैसे कि [[अंतः स्थापित प्रणालियाँ]] को लक्षित करता है। मानक पुस्तकालय का केवल सबचयन प्रदान कर सकता है। यह पुस्तकालय प्रवाह इनपुट और आउटपुट, मेमोरी एलोकेशन, मैथमैटिक्स, कैरेक्टर स्ट्रिंग्स और समय मूल्य को समर्थन करती है। कई अलग-अलग मानक शीर्षलेख उदाहरण के लिए, <code>stdio.h</code>) इन और अन्य मानक पुस्तकालय सुविधाओं के लिए इंटरफेस निर्दिष्ट करें।


चूंकिCमें कई कार्यक्रम लिखे गए हैं, इसलिए कई प्रकार के अन्य पुस्तकालय उपलब्ध हैं। पुस्तकालय अक्सरCमें लिखे जाते हैं क्योंकिCसंकलक कुशल [[वस्तु कोड]] उत्पन्न करते हैं; प्रोग्रामर तब लाइब्रेरी के लिए इंटरफेस बनाते हैं ताकि रूटीन का उपयोग जावा (प्रोग्रामिंग भाषा), पर्ल और पायथन (प्रोग्रामिंग भाषा) जैCउच्च-स्तरीय भाषाओं से किया जा सके।<ref name="bk21st" />
C पुस्तकालय फ़ंक्शन का अन्य सामान्य चयन वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैसी प्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल संचालन प्रणाली को अंतराफलक प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और UNIX विशिष्टता में विस्तृत हैं।


चूँकि, किसी में कई कार्यक्रम लिखे गए हैं, इसलिए कई प्रकार के अन्य पुस्तकालय उपलब्ध हैं। पुस्तकालय अधिकांशतः C में लिखे जाते हैं क्यों किसी संकलक कुशल [[वस्तु कोड|वस्तु]] संकेत उत्पन्न करते हैं प्रोग्रामर तब पुस्तकालय के लिए इंटरफेस बनाते हैं जिससे कि सामान्य उपयोग जावा प्रोग्रामिंग भाषा, मैक्तिक और पायथन प्रोग्रामिंग भाषा जैसी उच्च-स्तरीय भाषाओं से किया जा सके।<ref name="bk21st" />




=== फाइल हैंडलिंग और स्ट्रीम ===
=== फाइल संचालन और प्रवाह ===
फ़ाइल इनपुट और आउटपुट (I/O) स्वयंCभाषा का हिस्सा नहीं है, बल्कि इसके बजाय पुस्तकालयों (जैसेCमानक पुस्तकालय) और उनसे जुड़ी हेडर फाइलें (उदा। <code>stdio.h</code>). फ़ाइल हैंडलिंग आम तौर पर उच्च-स्तरीय I/O के माध्यम से कार्यान्वित की जाती है जो [[स्ट्रीम (कंप्यूटिंग)]] के माध्यम से काम करती है। धारा इस दृष्टिकोण से डेटा प्रवाह है जो उपकरणों से स्वतंत्र है, जबकि फ़ाइल ठोस उपकरण है। उच्च-स्तरीय I/O स्ट्रीम को फ़ाइल से जोड़कर किया जाता है।Cमानक पुस्तकालय में, [[डेटा बफर]] ( स्मृति क्षेत्र या कतार) अस्थायी रूप से डेटा को अंतिम गंतव्य पर भेजे जाने से पहले संग्रहीत करने के लिए उपयोग किया जाता है। यह धीमे उपकरणों के लिए प्रतीक्षा करने में लगने वाले समय को कम करता है, उदाहरण के लिए [[हार्ड ड्राइव]] या [[ठोस राज्य ड्राइव]] निम्न-स्तरीय I/O फ़ंक्शन मानकCलाइब्रेरी का हिस्सा नहीं हैं{{clarify|date=October 2021}} लेकिन आम तौर पर नंगे धातु प्रोग्रामिंग का हिस्सा होते हैं (प्रोग्रामिंग जो किCभी ऑपरेटिंग सिस्टम से स्वतंत्र होती है जैसे अधिकांश [[एम्बेडेड प्रोग्रामिंग]])कुछ अपवादों के साथ, कार्यान्वयन में निम्न-स्तरीय I/O शामिल हैं।
फ़ाइल इनपुट और आउटपुट (I/O) स्वयं सी भाषा  का भाग नहीं है, जबकि इसके अतिरिक्त पुस्तकालयों जैसे C मानक पुस्तकालय और उनसे जुड़ी प्रवेशिका फाइलें (उदाहरण। <code>stdio.h</code>). फ़ाइल संचालन सामान्यतः उच्च-स्तरीय I/O के माध्यम से कार्यान्वित की जाती है जो [[स्ट्रीम (कंप्यूटिंग)|प्रवाह (कंप्यूटिंग)]] के माध्यम से कार्य करती है। धारा इस दृष्टिकोण से डेटा प्रवाह है जो उपकरणों से स्वतंत्र है, चूँकि फ़ाइल ठोस उपकरण है। उच्च-स्तरीय I/O प्रवाह को फ़ाइल से जोड़कर किया जाता है। C मानक पुस्तकालय में, [[डेटा बफर|डेटा अंतर्रोधी]] स्मृति क्षेत्र अस्थायी रूप से डेटा को अंतिम गंतव्य पर भेजे जाने से पहले संग्रहीत करने के लिए उपयोग किया जाता है। यह धीमे उपकरणों के लिए प्रतीक्षा करने में लगने वाले समय को कम करता है, उदाहरण के लिए [[हार्ड ड्राइव]] या [[ठोस राज्य ड्राइव]] निम्न-स्तरीय I/O फ़ंक्शन मानकC पुस्तकालय का भाग नहीं हैं किन्तु सामान्यतः नंगे धातु प्रोग्रामिंग का भाग होते हैं। प्रोग्रामिंग जो किसी भी संचालन प्रणाली से स्वतंत्र होती है जैसे अधिकांश [[एम्बेडेड प्रोग्रामिंग|अंतर्निहित प्रोग्रामिंग]]) कुछ अपवादों के साथ, कार्यान्वयन में निम्न-स्तरीय I/O सम्मलित हैं।


== भाषा उपकरण ==
== भाषा उपकरण ==
{{More citations needed section|date=July 2014}}
C प्रोग्रामरों को अपरिभाषित व्यवहार या संभवतः गलत अभिव्यक्तियों के साथ संकलक द्वारा प्रदान की गई तुलना में अधिक कठोरता के साथ विवरणों को खोजने और ठीक करने में सहायता करने के लिए कई उपकरण विकसित किए गए हैं। उपकरण [[लिंट (सॉफ्टवेयर)]] पहला ऐसा था, जो कई अन्य लोगों के लिए अग्रणी था।
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 के लिए ऐसे कई उपकरण उपस्तिथ हैं, जैसे लिंट (सॉफ़्टवेयर)। जब कोई प्रोग्राम पहली बार लिखा जाता है तो संदिग्ध संकेत का पता लगाने के लिए लिंट का उपयोग करना सामान्य अभ्यास है। बार जब कोई प्रोग्राम लिंट पास कर लेता है, तो उसे 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 का मानक भाग नहीं हैं, जैसे कि सरणीयों के लिए सीमा जाँच, अंतर्रोधी पूर आना का पता लगाना, क्रमांकन, मेमोरी प्रबंधन देखना और कचरा संग्रह कंप्यूटर विज्ञान।
ऐCकार्रवाइयाँ करने के लिए कंपाइलर, लाइब्रेरी और ऑपरेटिंग सिस्टम स्तर तंत्र भी हैं जोCका मानक हिस्सा नहीं हैं, जैसे कि सरणियों के लिए सीमा जाँच, बफर ओवरफ़्लो का पता लगाना, क्रमांकन, मेमोरी प्रबंधन ट्रैकिंग और कचरा संग्रह (कंप्यूटर विज्ञान)।


[[IBM Rational Purify]] या Valgrind जैसे उपकरण और [[malloc]] के विशेष संस्करणों वाले पुस्तकालयों से लिंक करने से मेमोरी उपयोग में क्रम त्रुटियों को उजागर करने में मदद मिल सकती है।
[[IBM Rational Purify|IBM तर्कसंगत शुद्धि]] या [[वेलग्रिंड]] जैसे उपकरण और [[malloc|Malloc]] के विशेष संस्करणों वाले पुस्तकालयों से संपर्क करने से मेमोरी उपयोग में क्रम त्रुटियों को अनावृत करने में सहायता मिल सकती है।


== उपयोग ==
== उपयोग ==


=== सिस्टम प्रोग्रामिंग में उपयोग के लिए तर्क ===
=== प्रणाली प्रोग्रामिंग में उपयोग के लिए तर्क ===
[[File:The C Programming Language.png|thumb|Cप्रोग्रामिंग भाषा]]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> यह कई कारणों से है:
[[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> यह कई कारणों से है:
* संकलन के बाद उत्पन्न कोड को कई क्रम सिस्टम की आवश्यकता नहीं होती है, और इसे कुछ बूट कोड से सीधे तरीके से लागू किया जा सकता है - इसे निष्पादित करना सरल है।
* संकलन के बाद उत्पन्न संकेत को कई क्रम प्रणाली की आवश्यकता नहीं होती है, और इसे कुछ बूट संकेत से सीधे विधि से लागू किया जा सकता है - इसे निष्पादित करना सरल है।
* Cभाषा के बयान और भाव सामान्यतः लक्ष्य प्रोसेसर के लिए निर्देशों के अनुक्रम पर अच्छी तरह से मैप होते हैं, और इसके परिणामस्वरूप कम रन टाइम (प्रोग्राम जीवनचक्र चरण) होता है। सिस्टम संसाधनों पर रन-टाइम की मांग - यह निष्पादित करने के लिए तेज़ है।
* सी भाषा  के विवरण और भाव सामान्यतः लक्ष्य प्रोसेसर के लिए निर्देशों के अनुक्रम पर अच्छी प्रकार से मैप होते हैं और इसके परिणामस्वरूप कम चलाने का समय प्रोग्राम जीवनचक्र चरण होता है। प्रणाली संसाधनों पर क्रम की मांग - यह निष्पादित करने के लिए तेज़ है।
* ऑपरेटरों के अपने समृद्ध सेट के साथ,Cभाषा लक्षित सीपीयू की कई विशेषताओं का उपयोग कर सकती है। जहां विशेष सीपीयू में अधिक गूढ़ निर्देश होते हैं, उन निर्देशों का फायदा उठाने के लिए शायद [[आंतरिक कार्य]]ों के साथ भाषा संस्करण का निर्माण किया जा सकता है - यह व्यावहारिक रूप से सभी लक्ष्य सीपीयू की विशेषताओं का उपयोग कर सकता है।
* ऑपरेटरों के अपने समृद्ध चयन के साथ, सी भाषा  लक्षित CPU की कई विशेषताओं का उपयोग कर सकती है। जहां विशेष CPU में अधिक गूढ़ निर्देश होते हैं, उन निर्देशों का लाभ उठाने के लिए संभवतः [[आंतरिक कार्य]] के साथ भाषा संस्करण का निर्माण किया जा सकता है - यह व्यावहारिक रूप से सभी लक्ष्य CPU की विशेषताओं का उपयोग कर सकता है।
* भाषा बाइनरी डेटा के ब्लॉक पर संरचनाओं को ओवरले करना आसान बनाती है, जिससे डेटा को समझा जा सकता है, नेविगेट किया जा सकता है और संशोधित किया जा सकता है - यह डेटा स्ट्रक्चर, यहां तक ​​कि फाइल सिस्टम भी लिख सकता है।
* भाषा बाइनरी डेटा के खंड पर संरचनाओं को उपरिशायी करना आसान बनाती है, जिससे डेटा को समझा जा सकता है। नेविगेट किया जा सकता है और संशोधित किया जा सकता है। - यह डेटा स्ट्रक्चर, यहां तक ​​कि फाइल प्रणाली भी लिख सकता है।
* भाषा पूर्णांक अंकगणित और तर्क के लिए बिट हेरफेर सहित ऑपरेटरों के समृद्ध सेट का समर्थन करती है, और शायद फ्लोटिंग पॉइंट नंबरों के विभिन्न आकार - यह उचित रूप से संरचित डेटा को प्रभावी ढंग से संसाधित कर सकती है।
* भाषा पूर्णांक अंकगणित और तर्क के लिए अंश कार्यसाधन सहित ऑपरेटरों के समृद्ध चयन का समर्थन करती है और संभवतः दशमलव संख्याएं के विभिन्न आकार - यह उचित रूप से संरचित डेटा को प्रभावी ढंग से संसाधित कर सकती है।
* Cकाफी छोटी भाषा है, केवल कुछ मुट्ठी भर बयानों के साथ, और बहुत अधिक विशेषताओं के बिना जो व्यापक लक्ष्य कोड उत्पन्न करते हैं - यह समझ में आता है।
* C अधिक छोटी भाषा है, केवल कुछ मुट्ठी भर विवरणों के साथ और बहुत अधिक विशेषताओं के अतिरिक्त जो व्यापक लक्ष्य संकेत उत्पन्न करते हैं - यह समझ में आता है।
* C का मेमोरी आवंटन और डीललोकेशन पर सीधा नियंत्रण है, जो मेमोरी-हैंडलिंग ऑपरेशंस को उचित दक्षता और पूर्वानुमेय समय देता है, छिटपुट [[स्टॉप-द-वर्ल्ड]] कचरा संग्रह घटनाओं के लिए किCभी चिंता के बिना - इसका पूर्वानुमान योग्य प्रदर्शन है।
* C का मेमोरी आवंटन और विस्थापन पर सीधा नियंत्रण है, जो मेमोरी-संचालन ऑपरेशंस को उचित दक्षता और पूर्वानुमेय समय देता है, छिटपुट [[स्टॉप-द-वर्ल्ड]] कचरा संग्रह घटनाओं के लिए किसी भी चिंता के अतिरिक्त - इसका पूर्वानुमान योग्य प्रदर्शन है।
* प्लेटफ़ॉर्म हार्डवेयर को पॉइंटर्स और टाइप पनिंग के साथ ्सेस किया जा सकता है, इसलिए सिस्टम-विशिष्ट विशेषताएं (जैसे कंट्रोल/स्टेटस रजिस्टर, मेमोरी-मैप्ड I/O|I/O रजिस्टर) को कॉन्फ़िगर किया जा सकता है औरCमें लिखे कोड के साथ उपयोग किया जा सकता है - यह अच्छी तरह से इंटरैक्ट करता है जिस प्लेटफॉर्म पर यह चल रहा है।
* प्लेटफ़ॉर्म हार्डवेयर को सूचक और प्ररूप पनिंग के साथ अभिगम किया जा सकता है, इसलिए प्रणाली-विशिष्ट विशेषताएं जैसे नियंत्रण / स्थिति रजिस्टर , मेमोरी-मैप्ड I/O|I/O रजिस्टर) को कॉन्फ़िगर किया जा सकता है। C में लिखे संकेत के साथ उपयोग किया जा सकता है - यह अच्छी प्रकार से परस्पर प्रभाव करता है जिस प्लेटफॉर्म पर यह चल रहा है।
* लिंकर और पर्यावरण के आधार पर,Cकोड असेंबली भाषा में लिखी गई लाइब्रेरी को भी कॉल कर सकता है, और असेंबली भाषा से कॉल किया जा सकता है - यह अन्य निचले स्तर के कोड के साथ अच्छी तरह से इंटरऑपरेट करता है।
* लिंकर और पर्यावरण के आधार पर,C संकेत सभा भाषा में लिखी गई पुस्तकालय को भी कॉल कर सकता है, और सभा भाषा से कॉल किया जा सकता है - यह अन्य निचले स्तर के संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है।
* Cऔर इसके कॉलिंग सम्मेलनों और लिंकर संरचनाओं का उपयोग सामान्यतः अन्य उच्च-स्तरीय भाषाओं के संयोजन के साथ किया जाता है, जिसमेंCऔरCदोनों से कॉल समर्थित हैं - यह अन्य उच्च-स्तरीय कोड के साथ अच्छी तरह से इंटरऑपरेट करता है।
* C और इसके कॉलिंग सम्मेलनों और लिंकर संरचनाओं का उपयोग सामान्यतः अन्य उच्च-स्तरीय भाषाओं के संयोजन के साथ किया जाता है, जिसमेंC औरC दोनों से कॉल समर्थित हैं - यह अन्य उच्च-स्तरीय संकेत के साथ अच्छी प्रकार से इंटरऑपरेट करता है।
* C के पास बहुत ही परिपक्व और व्यापक पारिस्थितिकी तंत्र है, जिसमें लाइब्रेरी, फ्रेमवर्क, ओपन सोर्स कंपाइलर, डिबगर्स और यूटिलिटीज शामिल हैं, और यह वास्तविक मानक है। यह संभावना है कि ड्राइवर पहले से हीCमें मौजूद हैं, याCकंपाइलर के बैक-एंड के समान CPU स्थापत्य है, इसलिए दूसरी भाषा चुनने के लिए प्रोत्साहन कम है।
* C के पास बहुत ही परिपक्व और व्यापक पारिस्थितिकी तंत्र है। जिसमें पुस्तकालय, फ्रेमवर्क, ओपन स्रोत संकलक , डिबगर्स और उपयोगिता ज सम्मलित हैं और यह वास्तविक मानक है। यह संभावना है कि ड्राइवर पहले से ही C में उपस्तिथ हैं,C संकलक के बैक-और के समान CPU स्थापत्य है, इसलिए दूसरी भाषा चुनने के लिए प्रोत्साहन कम है।


=== बार वेब डेवलपमेंट के लिए उपयोगी किया गया ===
=== बार वेब विकास के लिए उपयोग किया जाता है ===
ऐतिहासिक रूप से,Cको कभी-कभी वेब एप्लिकेशन, सर्वर और ब्राउज़र के बीच सूचना के लिए गेटवे के रूप में [[कॉमन गेटवे इंटरफ़ेस]] (CGI) का उपयोग करके वेब विकास के लिए उपयोग किया जाता था।<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 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 की व्यापक उपलब्धता और दक्षता का परिणाम यह है कि अन्य प्रोग्रामिंग भाषाओं के संकलक , पुस्तकालय और इंटरप्रेटर (कंप्यूटिंग) अधिकांशतः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> और पीएचपी<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प्रोग्रामर को एल्गोरिदम और डेटा संरचनाओं के कुशल कार्यान्वयन के लिए सक्षम बनाता है, क्योंकि हार्डवेयर से अमूर्तता की परत पतली है, और इसका ओवरहेड कम है, कम्प्यूटेशनल रूप से गहन कार्यक्रमों के लिए महत्वपूर्ण मानदंड है। उदाहरण के लिए, [[जीएनयू मल्टीपल प्रेसिजन अरिथमेटिक लाइब्रेरी]], [[जीएनयू वैज्ञानिक पुस्तकालय]], [[मेथेमेटिका]] और [[MATLAB]] पूरी तरह या आंशिक रूप सेCमें लिखे गए हैं। कई भाषाएँCमें लाइब्रेरी फ़ंक्शंस को कॉल करने का समर्थन करती हैं, उदाहरण के लिए, Python (प्रोग्रामिंग भाषा)-आधारित फ्रेमवर्क [[NumPy]] उपयोग करता हैCउच्च-प्रदर्शन और हार्डवेयर-इंटरैक्टिंग पहलुओं के लिए।
C प्रोग्रामर को कलन विधि और डेटा संरचनाओं के कुशल कार्यान्वयन के लिए सक्षम बनाता है, क्योंकि हार्डवेयर से अमूर्तता की परत पतली है, और इसका उपरि कम है, कम्प्यूटेशनल रूप से गहन कार्यक्रमों के लिए महत्वपूर्ण मानदंड है। उदाहरण के लिए, [[जीएनयू मल्टीपल प्रेसिजन अरिथमेटिक लाइब्रेरी|GNU एकाधिक परिशुद्धता अंकगणितीय पुस्तकालय]], [[जीएनयू वैज्ञानिक पुस्तकालय|GNU वैज्ञानिक पुस्तकालय]], [[मेथेमेटिका|अंक शास्त्र]] और [[MATLAB|मतलब]] पूरी प्रकार या आंशिक रूप से C में लिखे गए हैं। कई भाषाएँ C में पुस्तकालय फ़ंक्शन को कॉल करने का समर्थन करती हैं, उदाहरण के लिए, Python (प्रोग्रामिंग भाषा)-आधारित फ्रेमवर्क [[NumPy]] उपयोग करता है C उच्च-प्रदर्शन और हार्डवेयर-इंटरैक्टिंग पहलुओं के लिए है ।


=== C[[मध्यवर्ती भाषा]] के रूप में ===
=== C [[मध्यवर्ती भाषा]] के रूप में ===
Cको कभी-कभी अन्य भाषाओं के कार्यान्वयन द्वारा मध्यवर्ती भाषा के रूप में प्रयोग किया जाता है। सुवाह्यता या सुविधा के लिए इस दृष्टिकोण का उपयोग किया जा सकता है;Cको मध्यवर्ती भाषा के रूप में उपयोग करके, अतिरिक्त मशीन-विशिष्ट कोड जेनरेटर आवश्यक नहीं हैं।Cमें कुछ विशेषताएं हैं, जैसे कि लाइन-नंबर प्रीप्रोसेसर निर्देश और इनिशियलाइज़र सूचियों के अंत में वैकल्पिक अतिरिक्त अल्पविराम, जो उत्पन्न कोड के संकलन का समर्थन करते हैं। चूंकि,Cकी कुछ कमियों ने सी-परिवार प्रोग्रामिंग भाषाओं की अन्य सूची के विकास को प्रेरित किया है। सी-आधारित भाषाओं को विशेष रूप से मध्यवर्ती भाषाओं के रूप में उपयोग करने के लिए रचना किया गया है, जैसे [[सी--]]। इसके अलावा, समकालीन प्रमुख संकलक GNU संकलक संग्रह और [[LLVM]] दोनों में [[मध्यवर्ती प्रतिनिधित्व]] है जोCनहीं है, और वे संकलकCसहित कई भाषाओं के लिए फ्रंट एंड का समर्थन करते हैं।
C को कभी-कभी अन्य भाषाओं के कार्यान्वयन द्वारा मध्यवर्ती भाषा के रूप में प्रयोग किया जाता है। सुवाह्यता या सुविधा के लिए इस दृष्टिकोण का उपयोग किया जा सकता है;C को मध्यवर्ती भाषा के रूप में उपयोग करके, अतिरिक्त मशीन-विशिष्ट संकेत जेनरेटर आवश्यक नहीं हैं।C में कुछ विशेषताएं हैं, जैसे कि लाइन-नंबर पूर्वप्रक्रमक निर्देश और प्रारंभकर्ता सूचियों के अंत में वैकल्पिक अतिरिक्त अल्पविराम, जो उत्पन्न संकेत के संकलन का समर्थन करते हैं। चूंकि,C की कुछ कमियों ने सी-परिवार प्रोग्रामिंग भाषाओं की अन्य सूची के विकास को प्रेरित किया है। सी-आधारित भाषाओं को विशेष रूप से मध्यवर्ती भाषाओं के रूप में उपयोग करने के लिए रचना किया गया है, जैसे [[सी--|C--]]। इसके अतिरिक्त, समकालीन प्रमुख संकलक GNU संकलक संग्रह और [[LLVM]] दोनों में [[मध्यवर्ती प्रतिनिधित्व]] है जोC नहीं है, और वे संकलक C सहित कई भाषाओं के लिए अग्रभाग का समर्थन करते हैं।


=== एंड-यूज़र एप्लिकेशन ===
=== अंतिम-उपयोगकर्ता अनुप्रयोग ===
[[एंड-यूज़र (कंप्यूटर साइंस)|एंड-यूज़र (कंप्यूटर विज्ञान)]] | एंड-यूज़र एप्लिकेशन को लागू करने के लिएCका भी व्यापक रूप से उपयोग किया गया है। {{Citation needed|date=April 2022}} हालाँकि, ऐसे अनुप्रयोग नई, उच्च-स्तरीय भाषाओं में भी लिखे जा सकते हैं।
[[एंड-यूज़र (कंप्यूटर साइंस)|और -उपयोगकर्ता (कंप्यूटर विज्ञान)]] | अंतिम-उपयोगकर्ता अनुप्रयोग को लागू करने के लिए C का भी व्यापक रूप से उपयोग किया गया है। चूँकि, ऐसे अनुप्रयोग नई उच्च-स्तरीय भाषाओं में भी लिखे जा सकते हैं।


== सीमाएं ==
== सीमाएं ==
चूँकि C लोकप्रिय, प्रभावशाली और अति सफल रहा है, इसमें कमियां सम्मलित हैं।


{{Rquote|quotetext=the power of assembly language and the convenience of ... assembly language|quote=|author=Dennis Ritchie|source=<ref>{{cite magazine |last1=Metz |first1=Cade |title=Dennis Ritchie: The Shoulders Steve Jobs Stood On |url=https://www.wired.com/2011/10/thedennisritchieeffect/ |magazine=Wired |access-date=2022-04-19}}</ref>}}
* K साथ मानक गतिशील स्मृति से निपटने <code>malloc</code> तथा <code>free</code> त्रुटि प्रवण है। बग में सम्मलित हैं: स्मृति आवंटित होने पर मेमोरी लीक होती है किन्तु मुक्त नहीं होती है और पहले से मुक्त स्मृति तक पहुंच।
जबकिCलोकप्रिय, प्रभावशाली और बेहद सफल रहा है, इसमें कमियां हैं, जिनमें शामिल हैं:
* सूचक के उपयोग और मेमोरी के प्रत्यक्ष कार्यसाधन का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, संभवतः प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण।
* कुछ प्रकार की जाँच होती है, किन्तु यह विविध कार्यों जैसे क्षेत्रों पर लागू नहीं होती है और प्रकार की जाँच तुच्छ या अनजाने में की जा सकती है।
* चूंकि संकलक द्वारा उत्पन्न संकेत में कुछ चेक ही होते हैं, प्रोग्रामर पर सभी संभावित परिणामों पर विचार करने का बोझ होता है, और अंतर्रोधी अधिवहित , सरणी सीमा जाँच , स्टैक अतिप्रवाह , मेमोरी थकावट, दौड़ की स्थिति, सूत्र एकांत आदि से बचाव होता है।
* सूचक का उपयोग और इनके क्रम कार्यसाधन का अर्थ है कि ही डेटा (अलियासिंग) तक पहुंचने के दो विधि हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं,C में संभव नहीं हैं। फोरट्रान को तेज माना जाता है।
* कुछ मानक पुस्तकालय कार्य, उदाहरण। <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>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> मैक्रोज़ के माध्यम से कोशिश-पकड़ तंत्र को लागू करने के लिए।


* के साथ मानक गतिशील स्मृति से निपटने <code>malloc</code> तथा <code>free</code> त्रुटि प्रवण है। बग में शामिल हैं: स्मृति आवंटित होने पर मेमोरी लीक होती है लेकिन मुक्त नहीं होती है; और पहले से मुक्त स्मृति तक पहुंच।
कुछ उद्देश्यों के लिए,C की प्रतिबंधित शैलियों को अपनाया गया है, उदाहरण MISRAC या CERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। [[सामान्य कमजोरियों की गणना]] जैसे डेटाबेस C आदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए अनुशंसा भी करते हैं।
* पॉइंटर्स के उपयोग और मेमोरी के प्रत्यक्ष हेरफेर का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, शायद प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण।
* कुछ प्रकार की जाँच होती है, लेकिन यह विविध कार्यों जैसे क्षेत्रों पर लागू नहीं होती है, और प्रकार की जाँच तुच्छ या अनजाने में की जा सकती है।
* चूंकि कंपाइलर द्वारा उत्पन्न कोड में कुछ चेक ही होते हैं, प्रोग्रामर पर सभी संभावित परिणामों पर विचार करने का बोझ होता है, और बफर ओवररन, एरे बाउंड चेकिंग, स्टैक ओवरफ्लो, मेमोरी थकावट, दौड़ की स्थिति, थ्रेड आइसोलेशन आदि से बचाव होता है।
* पॉइंटर्स का उपयोग और इनके रन-टाइम हेरफेर का अर्थ है कि ही डेटा (अलियासिंग) तक पहुंचने के दो तरीके हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं,Cमें संभव नहीं हैं। फोरट्रान को तेज माना जाता है।
* कुछ मानक पुस्तकालय कार्य, उदा। <code>scanf</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>__cdecl</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प्रतियोगिताओं के साथ मनाई गई है।
* Cअपवाद हैंडलिंग के लिए मानक समर्थन की कमी है और केवल त्रुटि जांच के लिए [[वापसी कोड|वापCकोड]] प्रदान करता है। सेटजम्प.एच |<code>setjmp</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की प्रतिबंधित शैलियों को अपनाया गया है, उदा। MISRACया CERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। [[सामान्य कमजोरियों की गणना]] जैसे डेटाबेसCआदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए सिफारिशें भी करते हैं।
ऐसे भाषा उपकरण हैं जो कुछ कमियों को दूर कर सकते हैं। समकालीन 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ने सी++,Cशार्प (प्रोग्रामिंग भाषा)|सी#, डी (प्रोग्रामिंग भाषा), गो (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, पर्ल, पीएचपी, रस्ट (प्रोग्रामिंग) जैCकई बाद की भाषाओं को प्रत्यक्ष और अप्रत्यक्ष रूप से प्रभावित किया है। भाषा) और यूनिक्स काCशेल।<ref name="kafmy">{{Cite book|title=कंप्यूटिंग के स्तंभ: चुनिंदा, महत्वपूर्ण प्रौद्योगिकी फर्मों का एक संग्रह|last1=O'Regan |first1=Gerard |isbn=978-3319214641 |oclc=922324121 |date=September 24, 2015}}</ref> सबसे व्यापक प्रभाव वाक्य-विन्यास रहा है; उल्लिखित सभी भाषाएं स्टेटमेंट और (अधिक या कम पहचानने योग्य) अभिव्यक्ति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 ने 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 (कंप्यूटर प्रोग्रामिंग) और CINT सहित कईCया निकट-C दुभाषिया मौजूद हैं, जिनका उपयोग स्क्रिप्टिंग के लिए भी किया जा सकता है।
Ch (कंप्यूटर प्रोग्रामिंग) और C INT सहित कई C या निकट-C दुभाषिया उपस्तिथ हैं, जिनका उपयोग पटकथा के लिए भी किया जा सकता है।


जब ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा लोकप्रिय हुईं, तो C++ और ऑब्जेक्टिव-CC के दो अलग-अलग ्सटेंशन थे जो ऑब्जेक्ट-ओरिएंटेड क्षमताएं प्रदान करते थे। दोनों भाषाओं को मूल रूप से स्रोत-से-स्रोत संकलक के रूप में लागू किया गया था; स्रोत कोड का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, 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विद [[वर्ग (प्रोग्रामिंग)]] नामित) को [[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++ का सुपरसेट अब{{when|date=August 2022}}C[[सी और सी ++ की संगतता|औरC++ की संगतता]] के साथ अधिकांशCका समर्थन करता है।


ऑब्जेक्टिव-Cमूल रूप सेCके ऊपर बहुत पतली परत थी, औरCका सख्त सुपरसेट बना हुआ है जो हाइब्रिड डायनेमिक/स्टैटिक टाइपिंग प्रतिमान का उपयोग करके ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की अनुमति देता है। ऑब्जेक्टिव-Cअपने सिंटैक्स कोCऔर स्मॉलटॉक दोनों से प्राप्त करता है: सिंटैक्स जिसमें प्रीप्रोसेसिंग, ्सप्रेशन, फ़ंक्शन डिक्लेरेशन और फ़ंक्शन कॉल शामिल हैं,Cसे विरासत में मिला है, जबकि ऑब्जेक्ट-ओरिएंटेड सुविधाओं के लिए सिंटैक्स मूल रूप से स्मॉलटाक से लिया गया था।
प्रयोजन-C मूल रूप से C के ऊपर बहुत पतली परत थी और C का दृढ़ उत्तम चयन बना हुआ है जो संकर गतिशील स्थिर प्ररूपिंग प्रतिमान का उपयोग करके प्रयोजन -अभिविन्यस्त प्रोग्रामिंग की अनुमति देता है। प्रयोजन -C अपने वाक्य-विन्यास को C और लघु वार्ता दोनों से प्राप्त करता है। वाक्य-विन्यास जिसमें प्रीप्रोसेसिंग, फ़ंक्शन घोषणा और फ़ंक्शन कॉल सम्मलित हैं। C से विरासत में मिला है, चूँकि प्रयोजन -अभिविन्यस्त सुविधाओं के लिए वाक्य-विन्यास मूल रूप से लघु वार्ता से लिया गया था।


C++ और Objective-C के अलावा, Ch (कंप्यूटर प्रोग्रामिंग), [[Cilk]] और Unified Parallel 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-आधारित प्रोग्रामिंग भाषाओं की सूची]]
* [[सी कंपाइलर्स की सूची|Cकंपाइलर्स की सूची]]
* [[सी कंपाइलर्स की सूची|C संकलनकर्ता की सूची]]


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 551: Line 513:


== अग्रिम पठन ==
== अग्रिम पठन ==
* {{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 ''(source)'']</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 ''(archive)'']</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 ''(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 ''(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 ''(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 563: Line 525:




==इस पेज में लापता आंतरिक लिंक की सूची==
==इस पेज में लापता आंतरिक संपर्क की सूची==


*सामान्य प्रयोजन की भाषा
*सामान्य प्रयोजन की भाषा
Line 574: Line 536:
*सरणी डेटा प्रकार
*सरणी डेटा प्रकार
*बहाव को काबू करें
*बहाव को काबू करें
*बयानों के ब्लॉक
*विवरणों के ब्लॉक
*सूचक (कंप्यूटर प्रोग्रामिंग)
*सूचक (कंप्यूटर प्रोग्रामिंग)
*असाइनमेंट (कंप्यूटर विज्ञान)
*कार्यभार (कंप्यूटर विज्ञान)
*स्ट्रिंग (कंप्यूटर विज्ञान)
*स्ट्रिंग (कंप्यूटर विज्ञान)
*सोर्स कोड
*स्रोत कोड
*बोहेम कचरा कलेक्टर
*बोहेम कचरा कलेक्टर
*पायथन (प्रोग्रामिंग भाषा)
*पायथन (प्रोग्रामिंग भाषा)
Line 587: Line 549:
*बरोज़ एमसीपी
*बरोज़ एमसीपी
*निम्नतम सामान्य भाजक (कंप्यूटर)
*निम्नतम सामान्य भाजक (कंप्यूटर)
*लोकेल (कंप्यूटर सॉफ्टवेयर)
*स्थान (कंप्यूटर सॉफ्टवेयर)
*अक्षरों को सांकेतिक अक्षरों में बदलना
*अक्षरों को सांकेतिक अक्षरों में बदलना
*लचीला सरणी सदस्य
*लचीला सरणी सदस्य
*निश्चित-बिंदु अंकगणित
*निश्चित-बिंदु अंकगणित
*शाब्दिक स्ट्रिंग
*शाब्दिक स्ट्रिंग
*बयान (कंप्यूटर विज्ञान)
*विवरण (कंप्यूटर विज्ञान)
*अल्पविराम संचालिका
*अल्पविराम संचालिका
*अंतरिक्ष (विराम चिह्न)
*अंतरिक्ष (विराम चिह्न)
*C11 (Cमानक संशोधन)
*C 11 (C मानक संशोधन)
*बेल का पात्र
*बेल का पात्र
*रन टाइम (कार्यक्रम जीवनचक्र चरण)
*चलाने का समय (कार्यक्रम जीवनचक्र चरण)
*वृद्धि और कमी ऑपरेटरों
*वृद्धि और कमी ऑपरेटरों
*कार्रवाई के आदेश
*कार्रवाई के आदेश
*संकेतक अंकगणित
*संकेतक अंकगणित
*गतिशील स्मृति आवंटन
*गतिशील स्मृति आवंटन
*उच्च-क्रम समारोह
*उच्च-क्रम फ़ंक्शन
*लिंक्ड सूची
*लिंक्ड सूची
*विखंडन दोष
*विखंडन दोष
Line 618: Line 580:
*सीईआरटी कोडिंग मानक
*सीईआरटी कोडिंग मानक
*सीएच (कंप्यूटर प्रोग्रामिंग)
*सीएच (कंप्यूटर प्रोग्रामिंग)
*स्रोत से स्रोत संकलक
*स्रोत से स्रोत संकलक  
*छोटी बात
*छोटी बात
== बाहरी संबंध ==
== बाहरी संबंध ==
{{Sister project links |v=C |commons=Category:C (programming language) |b=C Programming |voy=no |s=no |wikt=no}}
{{Sister project links |v=C |commons=Category:C (programming language) |b=C Programming |voy=no |s=no |wikt=no}}
* [https://www.open-std.org/jtc1/sc22/wg14/ ISOCWorking Group official website]
* [https://www.open-std.org/jtc1/sc22/wg14/ ISOC Working Group offiC ial website]
** [https://www.open-std.org/JTC1/SC22/WG14/www/standards ISO/IEC 9899], publicly available officialCdocuments, including the C99 Rationale
** [https://www.open-std.org/JTC1/SC22/WG14/www/standards ISO/IEC 9899], publiC ly available offiC ialC doC uments, inC luding the C 99 Rationale
** {{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 }}&nbsp;{{small|(3.61&nbsp;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 }}&nbsp;{{small|(3.61&nbsp;MB)}}
* [https://c-faq.com/ comp.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 Ritchie
* [http://csapp.cs.cmu.edu/3e/docs/chistory.html A History of C] , by Dennis RitChie
* [https://en.cppreference.com/w/c C Library Reference and Examples]
* [https://en.cppreference.com/w/c C Library ReferenC e and Examples]


{{C programming language|state=expanded}}
{{C programming language|state=expanded}}
Line 634: 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: 1972 में बनाई गई प्रोग्रामिंग भाषा]]
[[Category: आईएसओ मानक के साथ प्रोग्रामिंग भाषाएं]]
[[Category:सांख्यिकीय रूप से टाइप की गई प्रोग्रामिंग भाषाएं]]
[[Category:सांख्यिकीय रूप से टाइप की गई प्रोग्रामिंग भाषाएं]]
[[Category: सिस्टम प्रोग्रामिंग भाषाएं]]
[[Category:सिस्टम प्रोग्रामिंग भाषाएं]]
 
[[Category:सी (प्रोग्रामिंग भाषा)| ]]
 
[[Category:सी प्रोग्रामिंग भाषा परिवार]]
[[Category: Machine Translated Page]]
[[Category:Created On 01/12/2022]]

Latest revision as of 20:33, 16 May 2023

C
Text says "The C Programming Language"
द सी प्रोग्रामिंग लैंग्वेज का कवर ग्राफिक, सी के मूल डिजाइनर डेनिस रिची द्वारा सह-लेखक है। ?id=4Mfe4sAMFUYC|title=C संक्षेप में|last=Prinz|first=Peter|last2=Crawford|first2=Tony|date=2005-12-16|publisher=O'Reilly Media, Inc.|isbn=9780596550714| पृष्ठ=3|भाषा=en}}</ref>
ParadigmMulti-paradigm: imperative (procedural), structured
द्वारा डिज़ाइन किया गयाDennis Ritchie
DeveloperANSI X3J11 (ANSI C); ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 14 (Working Group 14) (ISO C)
पहली प्रस्तुति1972; 52 years ago (1972)[1]
Stable release
C17 / June 2018; 6 years ago (2018-06)
Preview release
C2x (N3054) / September 3, 2022; 2 years ago (2022-09-03)[2]
टाइपिंग अनुशासनStatic, weak, manifest, nominal
ओएसCross-platform
फ़ाइल नाम एक्सटेंशनएस.c, .h
वेबसाइटwww.iso.org/standard/74528.html
www.open-std.org/jtc1/sc22/wg14/
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 मूलभूत लैटिन वर्णमाला के छोटे और बड़े अक्षर: az AZ
  • दशमलव अंक: 09
  • ग्राफिक वर्ण: ! " # % & ' ( ) * + , - . / : < = > ? [ \ ] ^ _ { | } ~
  • व्हॉट्सएप कैरेक्टर: स्पेस (विराम चिह्न), टैब वर्ण, टैब कैरेक्टर, पृष्ठ विराम, नई पंक्ति

नई पंक्ति विवरण पंक्ति के अंत को इंगित करता है यह वास्तविक चरित्र के अनुरूप नहीं है, चूंकि सुविधा के लिए C इसे के रूप में मानता है।

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

मूल C निष्पादन चरित्र चयन में बेल चरित्र, Backspace और कैरिज वापसी के प्रतिनिधित्व के साथ-साथ समान वर्ण होते हैं। चलाने का समय प्रोग्राम जीवनचक्र चरण | C स्टैंडर्ड के प्रत्येक संशोधन के साथ विस्तारित वर्ण चयन के लिए क्रम समर्थन बढ़ गया है।

आरक्षित शब्द

C 89 में 32 आरक्षित शब्द हैं, जिन्हें कीवर्ड के रूप में भी जाना जाता है, जो ऐसे शब्द हैं जिनका उपयोग उन उद्देश्यों के अतिरिक्त किसी अन्य उद्देश्य के लिए नहीं किया जा सकता है जिनके लिए वे पूर्वनिर्धारित हैं:

C 99 ने पांच और शब्द आरक्षित किए:

C 11 ने सात और शब्द आरक्षित किए:[28]

* _Alignas
  • _Alignof
  • _atom
  • _normal
  • _no return
  • _static_assert
  • _caste_local

जल्दी में आरक्षित अधिकांश शब्द अंडरस्कोर( _ ) के साथ प्रारंभ होते हैं, जिसके बाद बड़ा अक्षर होता है, क्योंकि उस फॉर्म के पहचानकर्ता पहले C मानक द्वारा केवल कार्यान्वयन के उपयोग के लिए आरक्षित थे। चूंकि उपस्तिथा प्रोग्राम स्रोत संकेत को इन पहचानकर्ताओं का उपयोग नहीं करना चाहिए था, यह तब प्रभावित नहीं होगा जब C कार्यान्वयन प्रोग्रामिंग भाषा में इनका समर्थन करना प्रारंभ कर दें। कुछ मानक शीर्षलेख अंडरस्कोर किए गए पहचानकर्ताओं के लिए अधिक सुविधाजनक समानार्थक शब्द परिभाषित करते हैं। भाषा में पहले आरक्षित शब्द सम्मलित था जिसे कहा जाता था entry, किन्तुयह संभवतः ही कभी लागू किया गया था, और अब है आरक्षित शब्द के रूप में हटा दिया गया है।[29]

ऑपरेटर

C ऑपरेटर (कंप्यूटर प्रोग्रामिंग) के समृद्ध चयन का समर्थन करता है, जो उस अभिव्यक्ति का मूल्यांकन करते समय किए जाने वाले कार्यसाधन को निर्दिष्ट करने के लिए अभिव्यक्ति (कंप्यूटर विज्ञान) के भीतर उपयोग किए जाने वाले प्रतीक हैं। C के लिए ऑपरेटर हैं:

C ऑपरेटर का उपयोग करता है = गणित में समानता व्यक्त करने के लिए प्रयोग किया जाता है। फोरट्रान और PL/I के उदाहरण के बाद, कार्यभार को इंगित करने के लिए, किन्तुएएलजीओएल और इसके डेरिवेटिव के विपरीत C ऑपरेटर का उपयोग करता है। == समानता के लिए परीक्षण करने के लिए। इन दो ऑपरेटरों कार्यभार और समानता के बीच समानता के परिणामस्वरूप दूसरे के स्थान पर का आकस्मिक उपयोग हो सकता है और कई स्थितियों में गलती त्रुटि संदेश उत्पन्न नहीं करती है, चूंकि कुछ संकलक चेतावनियां उत्पन्न करते हैं। उदाहरण के लिए, प्रतिबंधात्मक अभिव्यक्ति if (a == b + 1) गलती से लिखा जा सकता है if (a = b + 1), जिसका मूल्यांकन सत्य के रूप में किया जाएगा यदि a कार्यभार के बाद शून्य नहीं है।[30]संचालन का C क्रम सदैव सहज नहीं होता है। उदाहरण के लिए, ऑपरेटर == ऑपरेटरों की तुलना में अधिक कसकर बांधता है पहले निष्पादित किया गया है। & (बिटवाइज ) और | (बिटवाइज़) जैसे भावों में x & 1 == 0, जिसे इस रूप में लिखा जाना चाहिए (x & 1) == 0 यदि वह कोडर का प्रयोजन है।[31]








डेटा प्रकार

1999 ISO C Concepts.png

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 संकलनकर्ता में चेक सम्मलित हैं जो कई संभावित बगों की पहचान करने में सहायता के लिए चेतावनियां उत्पन्न कर सकते हैं।

इनमें से कुछ कमियों ने अन्य भाषाओं के निर्माण को प्रेरित किया है।

संबंधित भाषाएँ

टीआईओबीई सूचकांक ग्राफ, विभिन्न प्रोग्रामिंग भाषाओं की लोकप्रियता की तुलना दिखा रहा है[52]

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 के लगभग उत्तम चयन हैं।

यह भी देखें

टिप्पणियाँ


संदर्भ

  1. 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."
  2. Fruderica (13 December 2020). "History of C". The cppreference.com. Archived from the original on October 24, 2020. Retrieved 24 October 2020.
  3. 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. 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
  5. "नाम पर आधारित है, और अंग्रेजी वर्णमाला में अक्षर C की तरह उच्चारित किया जाता है". English Chinese Dictionary. Retrieved 17 November 2022.
  6. "सी भाषा सबसे कम लोकप्रियता रेटिंग में गिरती है". Developer.com. 9 August 2016. Retrieved 2022-08-01.
  7. 7.0 7.1 7.2 7.3 7.4 7.5 Ritchie (1993)
  8. "प्रोग्रामिंग भाषा की लोकप्रियता". 2009. Archived from the original on 2009-01-16. Retrieved January 16, 2009.
  9. "TIOBE प्रोग्रामिंग कम्युनिटी इंडेक्स". 2009. Archived from the original on 2009-05-04. Retrieved May 6, 2009.
  10. 10.0 10.1 "History of C". en.cppreference.com. Archived from the original on May 29, 2018. Retrieved May 28, 2018.
  11. "अक्टूबर 2021 के लिए TIOBE इंडेक्स". Retrieved 2021-10-07.
  12. Ritchie, Dennis. "बीसीपीएल से बी से सी". Archived from the original on December 12, 2019. Retrieved September 10, 2019.
  13. 13.0 13.1 13.2 13.3 13.4 Jensen, Richard (9 December 2020). ""एक लानत बेवकूफी की बात" - सी की उत्पत्ति". Ars Technica (in English). Retrieved 2022-03-28.
  14. 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".)
  15. 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.
  16. Kernighan, Brian W.; Ritchie, Dennis M. (February 1978). सी प्रोग्रामिंग लैंग्वेज (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 978-0-13-110163-0.
  17. "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
  18. Kernighan, Brian W.; Ritchie, Dennis M. (March 1988). सी प्रोग्रामिंग लैंग्वेज (2nd ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 978-0-13-110362-7.
  19. Stroustrup, Bjarne (2002). सहोदर प्रतिद्वंद्विता: C और C++ (PDF) (Report). AT&T Labs. Archived (PDF) from the original on August 24, 2014. Retrieved April 14, 2014.
  20. सी अखंडता. International Organization for Standardization. March 30, 1995. Archived from the original on July 25, 2018. Retrieved July 24, 2018.
  21. "JTC1/SC22/WG14 - सी". Home page. ISO/IEC. Archived from the original on February 12, 2018. Retrieved June 2, 2011.
  22. Andrew Binstock (October 12, 2011). "हर्ब सटर के साथ साक्षात्कार". Dr. Dobbs. Archived from the original on August 2, 2013. Retrieved September 7, 2013.
  23. "संशोधित C23 अनुसूची WG 14 N 2984" (PDF). www.open-std.org. Archived (PDF) from the original on October 13, 2022. Retrieved 2022-10-28.
  24. "टीआर 18037: एंबेडेड सी" (PDF). ISO / IEC. Archived (PDF) from the original on February 25, 2021. Retrieved July 26, 2011.
  25. 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.
  26. Kernighan & Ritchie (1988), p. 192.
  27. Kernighan & Ritchie (1978), p. 3.
  28. "ISO/IEC 9899:201x (ISO C11) समिति मसौदा" (PDF). Archived (PDF) from the original on December 22, 2017. Retrieved September 16, 2011.
  29. Kernighan & Ritchie (1988), pp. 192, 259.
  30. "C++ में 10 कॉमन प्रोग्रामिंग मिस्टेक्स". Cs.ucr.edu. Archived from the original on October 21, 2008. Retrieved June 26, 2009.
  31. 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.
  32. Feuer, Alan R.; Gehani, Narain H. (March 1982). "प्रोग्रामिंग लैंग्वेज सी और पास्कल की तुलना". ACM Computing Surveys. 14 (1): 73–92. doi:10.1145/356869.356872. S2CID 3136859.
  33. Kernighan & Ritchie (1988), p. 122.
  34. 34.0 34.1 34.2 34.3 34.4 34.5 Cite error: Invalid <ref> tag; no text was provided for refs named bk21st
  35. 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.
  36. เอี่ยมสิริวงศ์, โอภาศ (2016). सी के साथ प्रोग्रामिंग. Bangkok, Thailand: SE-EDUCATION PUBLIC COMPANY LIMITED. pp. 225–230. ISBN 978-616-08-2740-4.
  37. 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.
  38. "लिंट के लिए मैन पेज (फ्रीबीएसडी सेक्शन 1)". unix.com. May 24, 2001. Retrieved July 15, 2014.
  39. Dale, Nell B.; Weems, Chip (2014). C++ के साथ प्रोग्रामिंग और समस्या समाधान (6th ed.). Burlington, MA: Jones & Bartlett Learning. ISBN 978-1449694289. OCLC 894992484.
  40. डॉ। डॉब की सोर्सबुक. U.S.A.: Miller Freeman, Inc. November–December 1995.
  41. "CGI प्रोग्रामिंग के लिए C का उपयोग करना". linuxjournal.com. March 1, 2005. Archived from the original on February 13, 2010. Retrieved January 4, 2010.
  42. Perkins, Luc (17 September 2013). "सी में वेब विकास: पागल? या लोमड़ी की तरह पागल?". Medium (in English).
  43. "C - सभी भाषाओं की जननी". ICT Academy at IITK (in English). 2018-11-13. Retrieved 2022-10-11.
  44. "1. सी या सी ++ के साथ पायथन का विस्तार - पायथन 3.10.7 प्रलेखन". docs.python.org. Retrieved 2022-10-11.
  45. "पर्ल 5 इंजन का अवलोकन | Opensource.com". opensource.com (in English). Retrieved 2022-10-11.
  46. "सी और सी ++ से रूबी के लिए". www.ruby-lang.org. Retrieved 2022-10-11.
  47. "पीएचपी क्या है? अपना पहला PHP प्रोग्राम कैसे लिखें". freeCodeCamp.org (in English). 2022-08-03. Retrieved 2022-10-11.
  48. corob-msft. "प्रागमा निर्देश और __pragma और _Pragma कीवर्ड". learn.microsoft.com (in English). Retrieved 2022-09-24.
  49. "प्रागमास (द सी प्रीप्रोसेसर)". gcc.gnu.org. Retrieved 2022-09-24.
  50. "प्रागमास". Intel (in English). Retrieved 2022-04-10.
  51. 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)
  52. McMillan, Robert (August 1, 2013). "क्या जावा अपना मोजो खो रहा है?". Wired. Archived from the original on February 15, 2017. Retrieved March 5, 2017.
  53. O'Regan, Gerard (September 24, 2015). कंप्यूटिंग के स्तंभ: चुनिंदा, महत्वपूर्ण प्रौद्योगिकी फर्मों का एक संग्रह. ISBN 978-3319214641. OCLC 922324121.
  54. Rauchwerger, Lawrence (2004). समानांतर कंप्यूटिंग के लिए भाषाएं और संकलक: 16वीं अंतर्राष्ट्रीय कार्यशाला, एलसीपीसी 2003, कॉलेज स्टेशन, टेक्सास, यूएसए, 2-4 अक्टूबर, 2003: संशोधित पेपर. Springer. ISBN 978-3540246442. OCLC 57965544.
  55. Stroustrup, Bjarne (1993). "सी++ का इतिहास: 1979−1991" (PDF). Archived (PDF) from the original on February 2, 2019. Retrieved June 9, 2011.


स्रोत


अग्रिम पठन


इस पेज में लापता आंतरिक संपर्क की सूची

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

बाहरी संबंध