सी (प्रोग्रामिंग भाषा)

सी (''अक्षर सी की तरह उच्चारित') एक सामान्य-उद्देश्य वाली भाषा है | सामान्य-उद्देश्य वाली कंप्यूटर प्रोग्रामिंग भाषा है। यह 1970 के दशक में डेनिस रिची द्वारा बनाया गया था, और बहुत व्यापक रूप से इस्तेमाल और प्रभावशाली बना हुआ है। डिज़ाइन के अनुसार, C की विशेषताएं लक्षित CPU की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे ऑपरेटिंग सिस्टम, डिवाइस ड्राइवर्स, प्रोटोकॉल स्टैक्स में स्थायी उपयोग मिला है, हालांकि कम हो रहा है अनुप्रयोग प्रक्रिया सामग्री के लिए। C का उपयोग आमतौर पर कंप्यूटर आर्किटेक्चर पर किया जाता है जो सबसे बड़े सुपर कंप्यूटर से लेकर सबसे छोटे microcontroller और अंतः स्थापित प्रणाली तक होता है।

प्रोग्रामिंग लैंग्वेज बी (प्रोग्रामिंग लैंग्वेज) के उत्तराधिकारी, सी को मूल रूप से यूनिक्स पर चलने वाली उपयोगिताओं के निर्माण के लिए 1972 और 1973 के बीच रिची द्वारा बेल लैब्स में विकसित किया गया था। इसे यूनिक्स ऑपरेटिंग सिस्टम के कर्नेल को फिर से लागू करने के लिए लागू किया गया था। 1980 के दशक के दौरान, C ने धीरे-धीरे लोकप्रियता हासिल की। यह मापने वाली प्रोग्रामिंग भाषा की लोकप्रियता में से एक बन गई है, सी संकलक्स के साथ लगभग उपलब्ध है सभी आधुनिक कंप्यूटर आर्किटेक्चर और ऑपरेटिंग सिस्टम। C को 1989 से अमेरिकी राष्ट्रीय मानक संस्थान (ANSI C) और अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) द्वारा मानकीकृत किया गया है।

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

2000 के बाद से, C ने लगातार TIOBE इंडेक्स में शीर्ष दो भाषाओं में स्थान दिया है, जो प्रोग्रामिंग भाषाओं की लोकप्रियता का एक पैमाना है।

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

सी प्रोग्राम सोर्स टेक्स्ट मुक्त रूप भाषा | फ्री-फॉर्मेट है, जिसमें बयान (प्रोग्रामिंग) सेपरेटर के रूप में सेमीकोलन का उपयोग किया जाता है और स्टेटमेंट्स के ग्रुपिंग ब्लॉक के लिए घुंघराले ब्रेसिज़ होते हैं।

सी भाषा निम्नलिखित विशेषताओं को भी प्रदर्शित करती है:
 * भाषा में कीवर्ड की एक छोटी, निश्चित संख्या होती है, जिसमें नियंत्रण प्रवाह आदिमों का एक पूरा सेट शामिल होता है:,  ,  ,  , तथा  . उपयोगकर्ता-परिभाषित नाम किसी भी प्रकार के सिगिल (कंप्यूटर प्रोग्रामिंग) द्वारा खोजशब्दों से अलग नहीं हैं।
 * इसमें बड़ी संख्या में अंकगणित, बिटवाइज़ और लॉजिक ऑपरेटर हैं:, आदि।
 * एक कथन में एक से अधिक असाइनमेंट (कंप्यूटर साइंस) किए जा सकते हैं।
 * कार्य:
 * जरूरत न होने पर फंक्शन रिटर्न वैल्यू को नजरअंदाज किया जा सकता है।
 * फ़ंक्शन और डेटा पॉइंटर्स तदर्थ रन-टाइम बहुरूपता की अनुमति देते हैं।
 * कार्यों को अन्य कार्यों के शाब्दिक दायरे में परिभाषित नहीं किया जा सकता है।
 * वेरिएबल्स को एक फंक्शन के भीतर परिभाषित किया जा सकता है, लेक्सिकल वेरिएबल स्कोप के साथ।
 * एक फ़ंक्शन स्वयं कॉल कर सकता है, इसलिए रिकर्सन (कंप्यूटर विज्ञान) समर्थित है।
 * डेटा टाइपिंग स्टेटिक टाइपिंग है, लेकिन मजबूत और कमजोर टाइपिंग; सभी डेटा का एक प्रकार होता है, लेकिन निहित रूपांतरण संभव हैं।
 * उपयोगकर्ता परिभाषित (टाइपपीफ) और यौगिक प्रकार संभव हैं।
 * विषम समुच्चय डेटा प्रकार संबंधित डेटा तत्वों को एक इकाई के रूप में एक्सेस और असाइन करने की अनुमति दें।
 * संघ प्रकार अतिव्यापी सदस्यों के साथ एक संरचना है; संग्रहीत अंतिम सदस्य ही मान्य है।
 * ऐरे डेटा टाइप इंडेक्सिंग एक सेकेंडरी नोटेशन है, जिसे पॉइंटर अंकगणित के संदर्भ में परिभाषित किया गया है। संरचनाओं के विपरीत, सरणियाँ प्रथम श्रेणी की वस्तुएँ नहीं हैं: उन्हें एकल अंतर्निर्मित ऑपरेटरों का उपयोग करके असाइन या तुलना नहीं की जा सकती है। उपयोग या परिभाषा में कोई सरणी कीवर्ड नहीं है; इसके बजाय, वर्गाकार कोष्ठक, उदाहरण के लिए, वाक्यात्मक रूप से सरणियों को इंगित करते हैं.
 * के साथ प्रगणित प्रकार संभव हैं  कीवर्ड। वे पूर्णांकों के साथ स्वतंत्र रूप से परस्पर परिवर्तनीय हैं।
 * स्ट्रिंग (कंप्यूटर साइंस) एक अलग डेटा प्रकार नहीं हैं, लेकिन परंपरागत रूप से सी स्ट्रिंग हैंडलिंग को अशक्त-समाप्त स्ट्रिंग के रूप में किया जाता है। नल-टर्मिनेटेड कैरेक्टर एरेज़।
 * मशीन के पतों को पॉइंटर (कंप्यूटर प्रोग्रामिंग) में परिवर्तित करके कंप्यूटर मेमोरी तक निम्न-स्तरीय पहुंच संभव है।
 * प्रक्रिया (कंप्यूटर विज्ञान) (सबरूटीन्स मान वापस नहीं कर रहे हैं) फ़ंक्शन का एक विशेष मामला है, एक अनपेक्षित रिटर्न प्रकार के साथ.
 * पुस्तकालय (कम्प्यूटिंग) के लिए कॉल के साथ मेमोरी एक कार्यक्रम के लिए गतिशील आवंटन हो सकती है।
 * एसी प्रीप्रोसेसर मैक्रो (कंप्यूटर विज्ञान) परिभाषा, स्रोत कोड फ़ाइल समावेशन और सशर्त संकलन करता है।
 * मॉड्यूलर प्रोग्रामिंग का एक मूल रूप है: फाइलों को अलग से संकलित किया जा सकता है और लिंकर (कंप्यूटिंग) एक साथ, नियंत्रण के साथ जो स्थिर (कीवर्ड) के माध्यम से अन्य फाइलों के लिए कार्य और डेटा ऑब्जेक्ट दिखाई दे रहे हैं। तथा  गुण।
 * इनपुट/आउटपुट|आई/ओ, स्ट्रिंग (कंप्यूटर साइंस) हेरफेर, और गणितीय कार्यों जैसी जटिल कार्यक्षमता लगातार लाइब्रेरी (कंप्यूटिंग) को सौंपी जाती है।
 * संकलन के बाद उत्पन्न कोड की अंतर्निहित प्लेटफॉर्म पर अपेक्षाकृत सीधी आवश्यकताएं होती हैं, जो इसे ऑपरेटिंग सिस्टम बनाने और एम्बेडेड सिस्टम में उपयोग के लिए उपयुक्त बनाती हैं।

जबकि C में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं शामिल नहीं हैं (जैसे वस्तु उन्मुख कार्यकर्म और कचरा संग्रह (कंप्यूटर विज्ञान)), इन्हें अक्सर बाहरी पुस्तकालयों (जैसे, GObject या Boehm कचरा) के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। एकत्र करनेवाला)।

अन्य भाषाओं से संबंध
सी ++, सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी#, यूनिक्स की सी खोल, डी (प्रोग्रामिंग भाषा), जाओ (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), जावास्क्रिप्ट (जावास्क्रिप्ट सहित) सहित बाद की कई भाषाओं ने प्रत्यक्ष या अप्रत्यक्ष रूप से सी से उधार लिया है। ट्रांसपिलर्स), जूलिया (प्रोग्रामिंग लैंग्वेज), लिम्बो (प्रोग्रामिंग भाषा), एलपीसी (प्रोग्रामिंग भाषा), उद्देश्य सी, पर्ल, पीएचपी, पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग भाषा), जंग (प्रोग्रामिंग भाषा), स्विफ्ट (प्रोग्रामिंग) भाषा), Verilog और SystemVerilog (हार्डवेयर विवरण भाषाएँ)। इन भाषाओं ने अपनी कई नियंत्रण संरचनाएं और अन्य बुनियादी विशेषताएं सी से खींची हैं। उनमें से अधिकांश (पायथन एक नाटकीय अपवाद होने के नाते) सी के लिए अत्यधिक समान सिंटैक्स (प्रोग्रामिंग भाषाएं) भी व्यक्त करते हैं, और वे पहचानने योग्य अभिव्यक्ति और कथन सी सिंटैक्स को जोड़ते हैं अंतर्निहित प्रकार के सिस्टम, डेटा मॉडल और शब्दार्थ के साथ जो मौलिक रूप से भिन्न हो सकते हैं।

प्रारंभिक घटनाक्रम
C की उत्पत्ति यूनिक्स ऑपरेटिंग सिस्टम के विकास से निकटता से जुड़ी हुई है, मूल रूप से डेनिस रिची और केन थॉम्पसन द्वारा PDP-7 पर असेंबली भाषा में लागू की गई थी, जिसमें सहयोगियों के कई विचार शामिल थे। आखिरकार, उन्होंने ऑपरेटिंग सिस्टम को PDP-11 में पोर्ट करने का फैसला किया। यूनिक्स का मूल PDP-11 संस्करण भी असेम्बली भाषा में विकसित किया गया था।

बी
थॉम्पसन नए प्लेटफॉर्म के लिए उपयोगिताओं को बनाने के लिए एक प्रोग्रामिंग भाषा चाहता था। सबसे पहले, उन्होंने फोरट्रान कंपाइलर बनाने की कोशिश की, लेकिन जल्द ही इस विचार को छोड़ दिया। इसके बजाय, उन्होंने हाल ही में विकसित बीसीपीएल सिस्टम प्रोग्रामिंग भाषा का एक कट-डाउन संस्करण बनाया। बीसीपीएल का आधिकारिक विवरण उस समय उपलब्ध नहीं था, और थॉम्पसन ने वाक्य-विन्यास को कम शब्दयुक्त होने के लिए संशोधित किया, और एक सरलीकृत ALGOL के समान जिसे SMALGOL के रूप में जाना जाता है। नतीजा यह था कि थॉम्पसन ने बी (प्रोग्रामिंग भाषा) कहा था। उन्होंने B को बहुत सारे SMALGOL सिंटैक्स के साथ BCPL शब्दार्थ के रूप में वर्णित किया। बीसीपीएल की तरह, बी के पास नई मशीनों को पोर्ट करने की सुविधा के लिए बूटस्ट्रैपिंग कंपाइलर था। हालाँकि, कुछ उपयोगिताएँ अंततः B में लिखी गईं क्योंकि यह बहुत धीमी थी, और PDP-11 सुविधाओं जैसे बाइट एड्रेसबिलिटी का लाभ नहीं उठा सकती थी।

न्यू बी और फर्स्ट सी रिलीज
1971 में, अधिक शक्तिशाली पीडीपी-11 की विशेषताओं का उपयोग करने के लिए, रिची ने बी में सुधार करना शुरू किया। एक महत्वपूर्ण जोड़ एक चरित्र प्रकार था। उन्होंने इसे न्यू बी कहा। थॉम्पसन ने अनुसंधान यूनिक्स कर्नेल लिखने के लिए एनबी का उपयोग करना शुरू किया, और उनकी आवश्यकताओं ने भाषा के विकास की दिशा को आकार दिया।   1972 तक, NB भाषा में समृद्ध प्रकार जोड़े गए: NB के पास सरणियाँ थीं   तथा. पॉइंटर्स, अन्य प्रकार के पॉइंटर्स उत्पन्न करने की क्षमता, सभी प्रकार की सरणियाँ, और फ़ंक्शंस से लौटाए जाने वाले प्रकार भी जोड़े गए। अभिव्यक्तियों के भीतर सरणियाँ संकेत बन गईं। एक नया संकलक लिखा गया था, और भाषा का नाम बदलकर C कर दिया गया था।

सी कंपाइलर और इसके साथ बनाई गई कुछ उपयोगिताओं को संस्करण 2 यूनिक्स में शामिल किया गया था, जिसे रिसर्च यूनिक्स के रूप में भी जाना जाता है।

संरचनाएं और यूनिक्स कर्नेल री-राइट
संस्करण 4 यूनिक्स में, नवंबर 1973 में जारी किया गया, यूनिक्स कर्नेल (ऑपरेटिंग सिस्टम) को सी में बड़े पैमाने पर फिर से लागू किया गया। इस समय तक, सी भाषा ने कुछ शक्तिशाली विशेषताएं हासिल कर ली थीं जैसे कि  प्रकार।

सी प्रीप्रोसेसर को 1973 के आसपास एलन स्नाइडर (कंप्यूटर वैज्ञानिक) के आग्रह पर पेश किया गया था और बीसीपीएल और पीएल/आई में उपलब्ध फ़ाइल-समावेशन तंत्र की उपयोगिता की मान्यता में भी। इसके मूल संस्करण में केवल फाइलें और सरल स्ट्रिंग प्रतिस्थापन शामिल हैं:  तथा   पैरामीटर रहित मैक्रोज़ का। इसके तुरंत बाद, इसे तर्क और सशर्त संकलन के साथ मैक्रोज़ को शामिल करने के लिए, ज्यादातर माइक लेस्क और फिर जॉन रेसर द्वारा विस्तारित किया गया था। यूनिक्स असेंबली लैंग्वेज के अलावा किसी अन्य भाषा में लागू किए गए पहले ऑपरेटिंग सिस्टम कर्नेल में से एक था। पहले के उदाहरणों में 1961 में बरोज़ लार्ज सिस्टम्स (जो ALGOL में लिखा गया था) के लिए मॉलटिक्स सिस्टम (जो PL/I में लिखा गया था) और बरोज़ MCP (MCP) शामिल हैं। 1977, रिची और स्टीफन सी. जॉनसन ने यूनिक्स ऑपरेटिंग सिस्टम की पोर्टेबिलिटी को सुविधाजनक बनाने के लिए भाषा में और बदलाव किए। जॉनसन के पोर्टेबल सी कंपाइलर ने नए प्लेटफॉर्म पर सी के कई कार्यान्वयनों के आधार के रूप में कार्य किया।

के एंड आर सी
1978 में, ब्रायन कर्निघन और डेनिस रिची ने द सी प्रोग्रामिंग लैंग्वेज का पहला संस्करण प्रकाशित किया। सी प्रोग्रामर्स को के एंड आर के रूप में जाना जाने वाला यह पुस्तक, भाषा के अनौपचारिक विशिष्टता (तकनीकी मानक) के रूप में कई वर्षों तक काम करता था। C के जिस संस्करण का वर्णन करता है उसे आमतौर पर 'K&R C' के रूप में संदर्भित किया जाता है।. जैसा कि यह 1978 में जारी किया गया था, इसे C78 भी कहा जाता है। पुस्तक का दूसरा संस्करण नीचे वर्णित एएनएसआई सी मानक को शामिल करता है।

के एंड आर ने कई भाषा सुविधाओं की शुरुआत की:
 * मानक I/O पुस्तकालय
 * डेटा प्रकार
 * डेटा प्रकार
 * फॉर्म के कंपाउंड असाइनमेंट ऑपरेटर  (जैसे कि  ) के रूप में बदल दिए गए थे   (वह है,  ) जैसे निर्माणों द्वारा बनाई गई शब्दार्थ अस्पष्टता को दूर करने के लिए , जिसकी व्याख्या की गई थी   (कमी   10 द्वारा) संभवतः इरादा के बजाय   (होने देना   -10 हो)।

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

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

उदाहरण के लिए:

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

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

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

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

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

एएनएसआई सी और आईएसओ सी
1970 और 1980 के दशक के अंत में, आईबीएम पीसी सहित विभिन्न प्रकार के मेनफ़्रेम कंप्यूटर, मिनी कंप्यूटर और माइक्रो कंप्यूटर के लिए सी के संस्करणों को लागू किया गया था, क्योंकि इसकी लोकप्रियता में काफी वृद्धि होने लगी थी।

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

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

ANSI, अन्य राष्ट्रीय मानक निकायों की तरह, अब C मानक को स्वतंत्र रूप से विकसित नहीं करता है, लेकिन कार्य समूह ISO/IEC JTC1/SC22/WG14 द्वारा बनाए गए अंतर्राष्ट्रीय C मानक को टाल देता है। अंतरराष्ट्रीय मानक के लिए एक अद्यतन का राष्ट्रीय अंगीकरण आम तौर पर आईएसओ प्रकाशन के एक वर्ष के भीतर होता है।

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

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

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

ANSI/ISO मानकीकरण प्रक्रिया के बाद, C भाषा विनिर्देश कई वर्षों तक अपेक्षाकृत स्थिर रहा। 1995 में, 1990 C मानक (ISO/IEC 9899/AMD1:1995, अनौपचारिक रूप से C95 के रूप में जाना जाता है) के लिए मानक संशोधन 1 प्रकाशित किया गया था, कुछ विवरणों को सही करने और अंतर्राष्ट्रीय चरित्र सेटों के लिए अधिक व्यापक समर्थन जोड़ने के लिए।

अपार्टमेंट
1990 के दशक के अंत में C मानक को और संशोधित किया गया, जिससे 1999 में ISO/IEC 9899:1999 का प्रकाशन हुआ, जिसे आमतौर पर C99 कहा जाता है। तब से इसे तकनीकी शुद्धिपत्र द्वारा तीन बार संशोधित किया गया है। C99 ने कई नई सुविधाएँ पेश कीं, जिनमें इनलाइन फ़ंक्शन, कई नए डेटा प्रकार (सहित  और ए   जटिल संख्याओं का प्रतिनिधित्व करने के लिए टाइप करें), चर-लंबाई सरणियों और लचीले सरणी सदस्यों, IEEE 754 फ़्लोटिंग पॉइंट के लिए बेहतर समर्थन, वैरिएडिक मैक्रोज़ के लिए समर्थन (चर arity के मैक्रोज़), और एक-पंक्ति टिप्पणियों के साथ शुरू होने के लिए समर्थन , जैसे बीसीपीएल या सी++ में। इनमें से कई पहले से ही कई सी कंपाइलर्स में एक्सटेंशन के रूप में लागू किए गए थे।

C99 अधिकांश भाग के लिए C90 के साथ संगत है, लेकिन कुछ मायनों में सख्त है; विशेष रूप से, एक घोषणा जिसमें एक प्रकार के विनिर्देशक का अभाव है, अब नहीं है  परोक्ष रूप से मान लिया। एक मानक मैक्रो   मान से परिभाषित किया गया है   यह इंगित करने के लिए कि C99 समर्थन उपलब्ध है। जीएनयू संकलक संग्रह, सन स्टूडियो (सॉफ्टवेयर), और अन्य सी संकलक अब C99 की कई या सभी नई सुविधाओं का समर्थन करें। Microsoft Visual C++ में C कंपाइलर, हालाँकि, C89 मानक और C99 के उन हिस्सों को लागू करता है जो C++11 के साथ संगतता के लिए आवश्यक हैं। इसके अलावा, मानक बचने वाले पात्रों के रूप में यूनिकोड पहचानकर्ताओं (चर/फ़ंक्शन नाम) के लिए समर्थन की आवश्यकता है (उदा। \U0001f431) और अपरिष्कृत यूनिकोड नामों के लिए समर्थन का सुझाव देता है।

सी11
2007 में, C मानक के एक और संशोधन पर काम शुरू हुआ, जिसे अनौपचारिक रूप से C1X कहा जाता है, जब तक कि 2011-12-08 को ISO/IEC 9899:2011 का आधिकारिक प्रकाशन नहीं हो गया। C मानक समिति ने उन नई विशेषताओं को अपनाने की सीमा तय करने के लिए दिशा-निर्देशों को अपनाया जिनका मौजूदा कार्यान्वयनों द्वारा परीक्षण नहीं किया गया था।

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

सी17
जून 2018 में ISO/IEC 9899:2018 के रूप में प्रकाशित, C17 C प्रोग्रामिंग भाषा के लिए वर्तमान मानक है। यह C11 में दोषों के लिए कोई नई भाषा सुविधाएँ, केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। मानक मैक्रो  की तरह परिभाषित किया गया है.

सी2एक्स
C2x अगले (C17 के बाद) प्रमुख C भाषा मानक संशोधन के लिए एक अनौपचारिक नाम है। इसके 2023 में मतदान होने की उम्मीद है और इसलिए इसे C23 कहा जाएगा।

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

2008 में, C मानक समिति ने C भाषा का विस्तार करते हुए एक तकनीकी रिपोर्ट प्रकाशित की पालन ​​​​करने के लिए सभी कार्यान्वयन के लिए एक सामान्य मानक प्रदान करके इन मुद्दों को हल करने के लिए। इसमें कई विशेषताएं शामिल हैं जो सामान्य सी में उपलब्ध नहीं हैं, जैसे निश्चित-बिंदु अंकगणित, नामित पता स्थान और मूल I/O हार्डवेयर एड्रेसिंग।

सिंटेक्स
सी में सी मानक द्वारा निर्दिष्ट एक औपचारिक व्याकरण है। रेखा के अंत आमतौर पर C में महत्वपूर्ण नहीं होते हैं; हालाँकि, प्रीप्रोसेसिंग चरण के दौरान लाइन सीमाओं का महत्व होता है। टिप्पणियाँ या तो सीमांकक के बीच दिखाई दे सकती हैं  तथा , या (C99 के बाद से) निम्नलिखित   पंक्ति के अंत तक। द्वारा सीमांकित टिप्पणियाँ   तथा   घोंसला न करें, और वर्णों के इन अनुक्रमों को टिप्पणी सीमांकक के रूप में व्याख्या नहीं किया जाता है यदि वे स्ट्रिंग शाब्दिक या वर्ण शाब्दिक के अंदर दिखाई देते हैं। C स्रोत फ़ाइलों में घोषणाएँ और फ़ंक्शन परिभाषाएँ होती हैं। फ़ंक्शन परिभाषाएँ, बदले में, घोषणाएँ और कथन (कंप्यूटर विज्ञान) शामिल करती हैं। घोषणाएँ या तो कीवर्ड का उपयोग करके नए प्रकारों को परिभाषित करती हैं जैसे,  , तथा  , या टाइप असाइन करें और शायद नए वेरिएबल्स के लिए स्टोरेज आरक्षित करें, आमतौर पर वेरिएबल नाम के बाद टाइप लिखकर। कीवर्ड जैसे   तथा   अंतर्निहित प्रकार निर्दिष्ट करें। कोड के अनुभाग कोष्ठकों में संलग्न हैं (  तथा  , कभी-कभी घुंघराले ब्रैकेट कहा जाता है) घोषणाओं के दायरे को सीमित करने और नियंत्रण संरचनाओं के लिए एकल कथन के रूप में कार्य करने के लिए।

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

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

कर्निघन और रिची सी प्रोग्रामिंग लैंग्वेज के परिचय में कहते हैं: सी, किसी भी अन्य भाषा की तरह, इसके दोष हैं। कुछ ऑपरेटरों की गलत प्राथमिकता है; सिंटैक्स के कुछ हिस्से बेहतर हो सकते हैं। पहले से मौजूद सॉफ़्टवेयर पर ऐसे परिवर्तनों के प्रभाव के कारण C मानक ने इनमें से कई दोषों को ठीक करने का प्रयास नहीं किया।

कैरेक्टर सेट
मूल सी स्रोत वर्ण सेट में निम्नलिखित वर्ण शामिल हैं:


 * आईएसओ बेसिक लैटिन वर्णमाला के लोअरकेस और अपरकेस अक्षर: –   –
 * दशमलव अंक: –
 * ग्राफिक वर्ण:
 * व्हॉट्सएप कैरेक्टर: स्पेस (विराम चिह्न), टैब वर्ण, टैब कैरेक्टर, पृष्ठ विराम, नई पंक्ति

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

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

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

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



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



C11 ने सात और शब्द आरक्षित किए:



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

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

सी ऑपरेटर का उपयोग करता है  (गणित में समानता व्यक्त करने के लिए प्रयोग किया जाता है) फोरट्रान और पीएल/आई के उदाहरण के बाद, असाइनमेंट को इंगित करने के लिए, लेकिन एएलजीओएल और इसके डेरिवेटिव के विपरीत। सी ऑपरेटर का उपयोग करता है   समानता के लिए परीक्षण करने के लिए। इन दो ऑपरेटरों (असाइनमेंट और समानता) के बीच समानता के परिणामस्वरूप दूसरे के स्थान पर एक का आकस्मिक उपयोग हो सकता है, और कई मामलों में, गलती एक त्रुटि संदेश उत्पन्न नहीं करती है (हालांकि कुछ कंपाइलर चेतावनियां उत्पन्न करते हैं)। उदाहरण के लिए, सशर्त अभिव्यक्ति   गलती से लिखा जा सकता है , जिसका मूल्यांकन सत्य के रूप में किया जाएगा यदि   असाइनमेंट के बाद शून्य नहीं है। संचालन का सी क्रम हमेशा सहज नहीं होता है। उदाहरण के लिए, ऑपरेटर  ऑपरेटरों की तुलना में अधिक कसकर बांधता है (पहले निष्पादित किया गया है)।   (बिटवाइज एंड) और   (बिटवाइज़ OR) जैसे भावों में , जिसे इस रूप में लिखा जाना चाहिए   अगर वह कोडर का इरादा है।
 * अंकगणित: जोड़|, घटाव | , गुणन | , विभाजन (गणित)| , मोडुलो ऑपरेशन | * असाइनमेंट (कंप्यूटर साइंस):
 * संवर्धित असाइनमेंट:
 * बिटवाइज़ ऑपरेशन:,  ,  ,
 * बिट शिफ्ट: ,
 * बूलियन बीजगणित:,  ,
 * ?:: ?:| * समानता परीक्षण: समानता (गणित) |, असमानता (गणित)| * सबरूटीन:
 * वृद्धि और कमी ऑपरेटर: ,
 * रिकॉर्ड (कंप्यूटर विज्ञान): ,
 * वस्तु का आकार:
 * आदेश सिद्धांत:,  ,  ,
 * सूचक (कंप्यूटर प्रोग्रामिंग):,  ,
 * सीक्वेंसिंग: कॉमा ऑपरेटर| * संचालन का क्रम # प्रोग्रामिंग भाषाएँ:
 * प्रकार रूपांतरण:

हैलो, विश्व उदाहरण


हैलो, दुनिया! प्रोग्राम|हैलो, दुनिया का उदाहरण, जो द सी प्रोग्रामिंग लैंग्वेज|केएंडआर के पहले संस्करण में दिखाई दिया, अधिकांश प्रोग्रामिंग पाठ्यपुस्तकों में एक परिचयात्मक कार्यक्रम के लिए मॉडल बन गया है। कार्यक्रम हैलो, वर्ल्ड को मानक आउटपुट पर प्रिंट करता है, जो आमतौर पर एक टर्मिनल या स्क्रीन डिस्प्ले होता है।

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

एक मानक-अनुरूप हैलो, विश्व कार्यक्रम है:

<वाक्यविन्यास प्रकाश लैंग = सी>
 * 1) शामिल 

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

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

अगली पंक्ति इंगित करती है कि एक फ़ंक्शन नाम दिया गया है  परिभाषित किया जा रहा है।   ई> फ़ंक्शन सी कार्यक्रमों में एक विशेष उद्देश्य प्रदान करता है; रन-टाइम वातावरण कॉल करता है   कार्यक्रम निष्पादन शुरू करने के लिए कार्य। प्रकार विनिर्देशक   इंगित करता है कि मूल्य जो कि मूल्यांकन के परिणामस्वरूप आवेदक (इस मामले में रन-टाइम पर्यावरण) को वापस कर दिया गया है   समारोह, एक पूर्णांक है। कीवर्ड   एक पैरामीटर सूची के रूप में इंगित करता है कि यह फ़ंक्शन कोई तर्क नहीं लेता है। ओपनिंग कर्ली ब्रेस परिभाषा की शुरुआत को इंगित करता है  समारोह।

अगली पंक्ति नाम के एक फ़ंक्शन को कॉल करती है (निष्पादन को मोड़ती है)।, जो इस मामले में सिस्टम लाइब्रेरी (कंप्यूटिंग) से आपूर्ति की जाती है। इस कॉल में,   फ़ंक्शन पारित किया जाता है (बशर्ते) एक एकल तर्क, स्ट्रिंग शाब्दिक में पहले वर्ण का पता. स्ट्रिंग शाब्दिक प्रकार के तत्वों के साथ एक अनाम सरणी डेटा प्रकार है, सरणी के अंत को चिह्नित करने के लिए अंतिम 0-मूल्यवान वर्ण के साथ संकलक द्वारा स्वचालित रूप से सेट किया गया (  इसे जानने की जरूरत है)।   e> C में एक सी में भागने के क्रम C एक न्यूलाइन कैरेक्टर में ट्रांसलेट करता है, जो आउटपुट पर करंट लाइन के अंत को दर्शाता है। का वापसी मूल्य   कार्य प्रकार का होता है  , लेकिन इसे चुपचाप त्याग दिया जाता है क्योंकि इसका उपयोग नहीं किया जाता है। (एक अधिक सावधान कार्यक्रम यह निर्धारित करने के लिए रिटर्न वैल्यू का परीक्षण कर सकता है कि   समारोह सफल हुआ।) अर्धविराम   कथन समाप्त करता है।

समापन कर्ली ब्रेस के लिए कोड के अंत को इंगित करता है  समारोह। C99 विनिर्देश और नए के अनुसार,   फ़ंक्शन, किसी भी अन्य फ़ंक्शन के विपरीत, निश्चित रूप से का मान लौटाएगा   पहुँचने पर   जो कार्य को समाप्त करता है। (पूर्व में एक स्पष्ट   कथन आवश्यक था।) इसे रन-टाइम सिस्टम द्वारा सफल निष्पादन का संकेत देने वाले निकास कोड के रूप में समझा जाता है।

डेटा प्रकार
C में टाइप सिस्टम स्टैटिक टाइपिंग और कमजोर टाइपिंग है, जो इसे पास्कल (प्रोग्रामिंग भाषा) जैसे ALGOL वंशजों के टाइप सिस्टम के समान बनाता है। विभिन्न आकारों के पूर्णांकों के लिए अंतर्निहित प्रकार हैं, दोनों हस्ताक्षरित और अहस्ताक्षरितचल बिन्दु संख्या संख्याएँ, और प्रगणित प्रकार. पूर्णांक प्रकार  अक्सर सिंगल-बाइट वर्णों के लिए प्रयोग किया जाता है। C99 ने एक बूलियन डेटाटाइप जोड़ा। एरे डेटा प्रकार, पॉइंटर (कंप्यूटर प्रोग्रामिंग), रिकॉर्ड (कंप्यूटर साइंस) सहित व्युत्पन्न प्रकार भी हैं, और संघ (कंप्यूटर विज्ञान).

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

कुछ लोग C के डिक्लेरेशन सिंटैक्स को विशेष रूप से समारोह सूचक के लिए अनपेक्षित पाते हैं। (रिची का विचार पहचानकर्ताओं को उनके उपयोग के समान संदर्भों में घोषित करना था: घोषणा उपयोग को दर्शाती है।) सी के सामान्य अंकगणितीय रूपांतरण कुशल कोड उत्पन्न करने की अनुमति देते हैं, लेकिन कभी-कभी अप्रत्याशित परिणाम उत्पन्न कर सकते हैं। उदाहरण के लिए, समान चौड़ाई के हस्ताक्षरित और अहस्ताक्षरित पूर्णांकों की तुलना के लिए हस्ताक्षरित मान को अहस्ताक्षरित में बदलने की आवश्यकता होती है। यदि हस्ताक्षरित मान ऋणात्मक है तो यह अनपेक्षित परिणाम उत्पन्न कर सकता है।

पॉइंटर्स
सी पॉइंटर (कंप्यूटर प्रोग्रामिंग) के उपयोग का समर्थन करता है, एक प्रकार का संदर्भ (कंप्यूटर विज्ञान) जो मेमोरी में किसी ऑब्जेक्ट या फ़ंक्शन का पता या स्थान रिकॉर्ड करता है। पॉइंटर्स को इंगित किए गए पते पर संग्रहीत डेटा तक पहुंचने के लिए, या पॉइंट-टू-फ़ंक्शन का आह्वान करने के लिए संदर्भित किया जा सकता है। असाइनमेंट या पॉइंटर अंकगणित का उपयोग करके पॉइंटर्स में हेरफेर किया जा सकता है। पॉइंटर मान का रन-टाइम प्रतिनिधित्व आम तौर पर एक कच्चा मेमोरी एड्रेस होता है (शायद एक ऑफ़सेट-इन-वर्ड फ़ील्ड द्वारा संवर्धित), लेकिन चूंकि पॉइंटर के प्रकार में इंगित की गई चीज़ का प्रकार शामिल होता है, पॉइंटर्स सहित एक्सप्रेशन को टाइप-चेक किया जा सकता है संकलन समय पर। पॉइंटर अंकगणित स्वचालित रूप से पॉइंट-टू-डेटा प्रकार के आकार से स्केल किया जाता है।

सी में कई उद्देश्यों के लिए पॉइंटर्स का उपयोग किया जाता है। स्ट्रिंग (कंप्यूटर साइंस) को आमतौर पर वर्णों के सरणियों में पॉइंटर्स का उपयोग करके हेरफेर किया जाता है। डायनेमिक मेमोरी आवंटन पॉइंटर्स का उपयोग करके किया जाता है; ए का परिणाम  आमतौर पर संग्रहीत किए जाने वाले डेटा के डेटा प्रकार में रूपांतरण होता है। कई डेटा प्रकार, जैसे पेड़ (डेटा संरचना), आमतौर पर गतिशील रूप से आवंटित किए जाते हैं   पॉइंटर्स का उपयोग करके एक साथ जुड़ी हुई वस्तुएं। पॉइंटर्स टू अन्य पॉइंटर्स का उपयोग अक्सर बहु-आयामी सरणियों और सरणियों में किया जाता है   वस्तुओं। फ़ंक्शंस के पॉइंटर्स (फ़ंक्शन पॉइंटर्स) प्रेषण तालिका में उच्च-क्रम फ़ंक्शंस (जैसे qsort या bsearch) के तर्कों के रूप में फ़ंक्शन पास करने के लिए उपयोगी होते हैं, या कॉलबैक (कंप्यूटर विज्ञान) के रूप में Event_(computing)#Event_handler ।

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

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

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

सरणियाँ
सी में ऐरे डेटा प्रकार प्रकार परंपरागत रूप से संकलन समय पर निर्दिष्ट एक निश्चित, स्थिर आकार के होते हैं। अधिक हालिया C99 मानक भी चर-लंबाई सरणियों के एक रूप की अनुमति देता है। हालांकि, मानक पुस्तकालय का उपयोग करके, रन-टाइम पर स्मृति का एक ब्लॉक (मनमाने आकार का) आवंटित करना भी संभव है  कार्य करें, और इसे एक सरणी के रूप में मानें।

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

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

आधुनिक सी (सी 99 या बाद में) का उपयोग करने वाला निम्न उदाहरण हीप पर द्वि-आयामी सरणी का आवंटन और एक्सेस के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है (जो कई सी कंपाइलर्स पर सीमा-जांच का उपयोग कर सकता है): <वाक्यविन्यास प्रकाश लैंग = सी> इंट फंक (इंट एन, इंट एम) { फ्लोट (* पी) [एन] [एम] = मॉलोक (आकार * पी); अगर (! पी) वापसी -1; के लिए (int i = 0; i <एन; i++) के लिए (इंट जे = 0; जे <एम; जे ++) (*p)[i][j] = i + j; Print_array (एन, एम, पी); मुक्त (पी); वापसी 1; } 

और यहाँ C99 के Auto VLA फीचर का उपयोग करते हुए एक समान कार्यान्वयन है: <वाक्यविन्यास प्रकाश लैंग = सी> इंट फंक (इंट एन, इंट एम) { // सावधानी: यह सुनिश्चित करने के लिए जांच की जानी चाहिए कि N*M*sizeof(float) ऑटो वीएलए के लिए सीमाओं से अधिक नहीं है और स्टैक के उपलब्ध आकार के भीतर है। फ्लोट पी [एन] [एम]; // ऑटो वीएलए को स्टैक पर आयोजित किया जाता है, और फ़ंक्शन लागू होने पर आकार दिया जाता है के लिए (int i = 0; i <एन; i++) के लिए (इंट जे = 0; जे <एम; जे ++) पी [मैं] [जे] = मैं + जे; // मुक्त करने की कोई आवश्यकता नहीं है (पी) क्योंकि यह स्टैक फ्रेम के बाकी हिस्सों के साथ फ़ंक्शन से बाहर निकलने पर गायब हो जाएगा वापसी 1; } 

ऐरे-पॉइंटर विनिमेयता
सबस्क्रिप्ट नोटेशन  (कहाँ पे   एक सूचक को नामित करता है) के लिए सिंटैक्टिक चीनी है. सूचक प्रकार के संकलक के ज्ञान का लाभ उठाते हुए, वह पता  पॉइंट टू बेस एड्रेस नहीं है (द्वारा इंगित किया गया है  ) द्वारा बढ़ाया गया   बाइट्स, बल्कि इसके द्वारा बढ़ाए गए आधार पते के रूप में परिभाषित किया गया है   एक तत्व के आकार से गुणा करें   इशारा करना। इस प्रकार,   निर्दिष्ट करता है  सरणी का वें तत्व।

इसके अलावा, अधिकांश अभिव्यक्ति संदर्भों में (एक उल्लेखनीय अपवाद के संकार्य के रूप में है ), सरणी प्रकार की अभिव्यक्ति स्वचालित रूप से सरणी के पहले तत्व में सूचक में परिवर्तित हो जाती है। इसका तात्पर्य यह है कि किसी फ़ंक्शन के तर्क के रूप में नामित होने पर किसी सरणी को पूरी तरह से कॉपी नहीं किया जाता है, बल्कि केवल इसके पहले तत्व का पता पारित किया जाता है। इसलिए, हालांकि C में फ़ंक्शन कॉल कॉल-टू-मूल्य से | पास-बाय-वैल्यू शब्दार्थ का उपयोग करते हैं, सरणियाँ प्रभावी रूप से संदर्भ (कंप्यूटर विज्ञान) द्वारा पारित की जाती हैं।

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

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

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

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

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

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

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

सी लाइब्रेरी फ़ंक्शंस का एक अन्य सामान्य सेट वे हैं जो विशेष रूप से यूनिक्स और यूनिक्स जैसी प्रणालियों के लिए लक्षित अनुप्रयोगों द्वारा उपयोग किए जाते हैं, विशेष रूप से ऐसे फ़ंक्शन जो कर्नेल (ऑपरेटिंग सिस्टम) को एक इंटरफ़ेस प्रदान करते हैं। ये कार्य विभिन्न मानकों जैसे POSIX और एकल UNIX विशिष्टता में विस्तृत हैं।

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

फाइल हैंडलिंग और स्ट्रीम
फ़ाइल इनपुट और आउटपुट (I/O) स्वयं C भाषा का हिस्सा नहीं है, बल्कि इसके बजाय पुस्तकालयों (जैसे C मानक पुस्तकालय) और उनसे जुड़ी हेडर फाइलें (उदा। ). फ़ाइल हैंडलिंग आम तौर पर उच्च-स्तरीय I/O के माध्यम से कार्यान्वित की जाती है जो स्ट्रीम (कंप्यूटिंग) के माध्यम से काम करती है। एक धारा इस दृष्टिकोण से एक डेटा प्रवाह है जो उपकरणों से स्वतंत्र है, जबकि एक फ़ाइल एक ठोस उपकरण है। उच्च-स्तरीय I/O स्ट्रीम को फ़ाइल से जोड़कर किया जाता है। सी मानक पुस्तकालय में, एक डेटा बफर (एक स्मृति क्षेत्र या कतार) अस्थायी रूप से डेटा को अंतिम गंतव्य पर भेजे जाने से पहले संग्रहीत करने के लिए उपयोग किया जाता है। यह धीमे उपकरणों के लिए प्रतीक्षा करने में लगने वाले समय को कम करता है, उदाहरण के लिए हार्ड ड्राइव या ठोस राज्य ड्राइव निम्न-स्तरीय I/O फ़ंक्शन मानक C लाइब्रेरी का हिस्सा नहीं हैं लेकिन आम तौर पर नंगे धातु प्रोग्रामिंग का हिस्सा होते हैं (प्रोग्रामिंग जो किसी भी ऑपरेटिंग सिस्टम से स्वतंत्र होती है जैसे अधिकांश एम्बेडेड प्रोग्रामिंग)। कुछ अपवादों के साथ, कार्यान्वयन में निम्न-स्तरीय I/O शामिल हैं।

भाषा उपकरण
सी प्रोग्रामरों को अपरिभाषित व्यवहार या संभवतः गलत अभिव्यक्तियों के साथ संकलक द्वारा प्रदान की गई तुलना में अधिक कठोरता के साथ बयानों को खोजने और ठीक करने में मदद करने के लिए कई उपकरण विकसित किए गए हैं। टूल लिंट (सॉफ्टवेयर) पहला ऐसा था, जो कई अन्य लोगों के लिए अग्रणी था।

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

IBM Rational Purify या Valgrind जैसे उपकरण और malloc के विशेष संस्करणों वाले पुस्तकालयों से लिंक करने से मेमोरी उपयोग में रनटाइम त्रुटियों को उजागर करने में मदद मिल सकती है।

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

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

कुछ अन्य भाषाएँ स्वयं C
में लिखी गई हैं सी की व्यापक उपलब्धता और दक्षता का एक परिणाम यह है कि अन्य प्रोग्रामिंग भाषाओं के कंपाइलर, लाइब्रेरी और इंटरप्रेटर (कंप्यूटिंग) अक्सर सी में लागू होते हैं। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के संदर्भ कार्यान्वयन, पर्ल, रूबी (प्रोग्रामिंग भाषा), और पीएचपी C में लिखे गए हैं।

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

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

एंड-यूज़र एप्लिकेशन
एंड-यूज़र (कंप्यूटर साइंस) | एंड-यूज़र एप्लिकेशन को लागू करने के लिए C का भी व्यापक रूप से उपयोग किया गया है। हालाँकि, ऐसे अनुप्रयोग नई, उच्च-स्तरीय भाषाओं में भी लिखे जा सकते हैं।

सीमाएं
जबकि C लोकप्रिय, प्रभावशाली और बेहद सफल रहा है, इसमें कमियां हैं, जिनमें शामिल हैं:


 * के साथ मानक गतिशील स्मृति से निपटने  तथा   त्रुटि प्रवण है। बग में शामिल हैं: स्मृति आवंटित होने पर मेमोरी लीक होती है लेकिन मुक्त नहीं होती है; और पहले से मुक्त स्मृति तक पहुंच।
 * पॉइंटर्स के उपयोग और मेमोरी के प्रत्यक्ष हेरफेर का मतलब है कि मेमोरी का भ्रष्टाचार संभव है, शायद प्रोग्रामर की त्रुटि या खराब डेटा की अपर्याप्त जाँच के कारण।
 * कुछ प्रकार की जाँच होती है, लेकिन यह विविध कार्यों जैसे क्षेत्रों पर लागू नहीं होती है, और प्रकार की जाँच तुच्छ या अनजाने में की जा सकती है।
 * चूंकि कंपाइलर द्वारा उत्पन्न कोड में कुछ चेक ही होते हैं, प्रोग्रामर पर सभी संभावित परिणामों पर विचार करने का बोझ होता है, और बफर ओवररन, एरे बाउंड चेकिंग, स्टैक ओवरफ्लो, मेमोरी थकावट, दौड़ की स्थिति, थ्रेड आइसोलेशन आदि से बचाव होता है।
 * पॉइंटर्स का उपयोग और इनके रन-टाइम हेरफेर का अर्थ है कि एक ही डेटा (अलियासिंग) तक पहुंचने के दो तरीके हो सकते हैं, जो संकलन समय पर निर्धारित नहीं होते हैं। इसका मतलब यह है कि कुछ अनुकूलन जो अन्य भाषाओं के लिए उपलब्ध हो सकते हैं, सी में संभव नहीं हैं। फोरट्रान को तेज माना जाता है।
 * कुछ मानक पुस्तकालय कार्य, उदा।, बफर ओवररन का कारण बन सकता है।
 * उत्पन्न कोड में निम्न-स्तरीय वेरिएंट के समर्थन में सीमित मानकीकरण है, उदाहरण के लिए: अलग-अलग फ़ंक्शन कॉलिंग कन्वेंशन और अनुप्रयोग बाइनरी इंटरफ़ेस; विभिन्न संरचना पैकिंग सम्मेलन; बड़े पूर्णांक (एंडियननेस सहित) के भीतर अलग-अलग बाइट ऑर्डर करना। कई भाषा कार्यान्वयनों में, इनमें से कुछ विकल्पों को प्रीप्रोसेसर निर्देश के साथ नियंत्रित किया जा सकता है,  और कुछ अतिरिक्त खोजशब्दों के साथ उदा. उपयोग   कॉलिंग कन्वेंशन। लेकिन निर्देश और विकल्प लगातार समर्थित नहीं हैं।
 * मानक पुस्तकालय का उपयोग कर सी स्ट्रिंग हैंडलिंग कोड-गहन है, जिसमें स्पष्ट स्मृति प्रबंधन आवश्यक है।
 * भाषा सीधे ऑब्जेक्ट ओरिएंटेशन, टाइप इंट्रोस्पेक्शन, रन-टाइम एक्सप्रेशन इवैल्यूएशन, जेनरिक आदि का समर्थन नहीं करती है।
 * भाषा सुविधाओं के अनुचित उपयोग के विरुद्ध बहुत कम सुरक्षा उपाय हैं, जिसके कारण कोड अनुरक्षणीय नहीं हो सकता है। ट्रिकी कोड के लिए यह सुविधा अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता और अंडरहैंडेड सी प्रतियोगिता जैसी प्रतियोगिताओं के साथ मनाई गई है।
 * सी अपवाद हैंडलिंग के लिए मानक समर्थन की कमी है और केवल त्रुटि जांच के लिए वापसी कोड प्रदान करता है। सेटजम्प.एच | तथा  में मानक पुस्तकालय कार्यों का उपयोग किया गया है मैक्रोज़ के माध्यम से ट्राइ-कैच मैकेनिज्म को लागू करने के लिए।

कुछ उद्देश्यों के लिए, सी की प्रतिबंधित शैलियों को अपनाया गया है, उदा। MISRA C या CERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। सामान्य कमजोरियों की गणना जैसे डेटाबेस सी आदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए सिफारिशें भी करते हैं।

ऐसे #भाषा उपकरण हैं जो कुछ कमियों को दूर कर सकते हैं। समकालीन सी कंपाइलर्स में चेक शामिल हैं जो कई संभावित बगों की पहचान करने में सहायता के लिए चेतावनियां उत्पन्न कर सकते हैं।

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

संबंधित भाषाएँ
सी ने सी++, सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी#, डी (प्रोग्रामिंग लैंग्वेज), गो (प्रोग्रामिंग लैंग्वेज), जावा (प्रोग्रामिंग लैंग्वेज), जावास्क्रिप्ट, पर्ल, पीएचपी, रस्ट (प्रोग्रामिंग) जैसी कई बाद की भाषाओं को प्रत्यक्ष और अप्रत्यक्ष रूप से प्रभावित किया है। भाषा) और यूनिक्स का सी शेल। सबसे व्यापक प्रभाव वाक्य-विन्यास रहा है; उल्लिखित सभी भाषाएं स्टेटमेंट और (अधिक या कम पहचानने योग्य) अभिव्यक्ति सी बेल्टैक्स को टाइप सिस्टम, डेटा मॉडल और/या बड़े पैमाने पर प्रोग्राम संरचनाओं के साथ जोड़ती हैं जो सी से भिन्न होती हैं, कभी-कभी मूल रूप से।

Ch (कंप्यूटर प्रोग्रामिंग) और CINT सहित कई C या निकट-C दुभाषिया मौजूद हैं, जिनका उपयोग स्क्रिप्टिंग के लिए भी किया जा सकता है।

जब ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग लैंग्वेज लोकप्रिय हुईं, तो C++ और ऑब्जेक्टिव-सी C के दो अलग-अलग एक्सटेंशन थे जो ऑब्जेक्ट-ओरिएंटेड क्षमताएं प्रदान करते थे। दोनों भाषाओं को मूल रूप से स्रोत-से-स्रोत संकलक के रूप में लागू किया गया था; स्रोत कोड का सी में अनुवाद किया गया था, और फिर सी कंपाइलर के साथ संकलित किया गया था। C++ प्रोग्रामिंग लैंग्वेज (मूल रूप से C विद वर्ग (प्रोग्रामिंग) नामित) को Bjarne Stroustrup द्वारा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रदान करने के दृष्टिकोण के रूप में तैयार किया गया था। C-जैसे सिंटैक्स के साथ ऑब्जेक्ट-ओरिएंटेड कार्यक्षमता। C++ ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में उपयोगी अधिक टाइपिंग स्ट्रेंथ, स्कूपिंग और अन्य टूल जोड़ता है, और टेम्प्लेट के माध्यम से सामान्य प्रोग्रामिंग की अनुमति देता है। लगभग C, C++ का सुपरसेट अब सी और सी ++ की संगतता के साथ अधिकांश सी का समर्थन करता है।

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

C++ और Objective-C के अलावा, Ch (कंप्यूटर प्रोग्रामिंग), Cilk और Unified Parallel C, C के लगभग सुपरसेट हैं।

यह भी देखें

 * सी और सी ++ की संगतता
 * पास्कल और सी की तुलना
 * प्रोग्रामिंग भाषाओं की तुलना
 * अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता
 * सी-आधारित प्रोग्रामिंग भाषाओं की सूची
 * सी कंपाइलर्स की सूची

स्रोत

 * लेखक के सौजन्य से, पर भी
 * लेखक के सौजन्य से, पर भी

अग्रिम पठन

 * (source)
 * (free)
 * (archive)
 * (archive)
 * (free)
 * (free)
 * (free)
 * (free)

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

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

बाहरी संबंध

 * ISO C Working Group official website
 * ISO/IEC 9899, publicly available official C documents, including the C99 Rationale
 * (3.61 MB)
 * comp.lang.c Frequently Asked Questions
 * A History of C, by Dennis Ritchie
 * C Library Reference and Examples