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

http://www.open-std.org/jtc1/sc22/wg14/ }} C अक्षर C के रूप में उच्चारित' सामान्य-उद्देश्य वाली कंप्यूटर प्रोग्रामिंग भाषा है। यह 1970 के दशक में डेनिस रिची द्वारा बनाया गया था। यह बहुत व्यापक रूप से उपयोगी और प्रभावशाली बना हुआ है। रचना के अनुसार, C की विशेषताएं लक्षित CPU की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे ऑपरेटिंग सिस्टम, डिवाइस ड्राइवर, प्रोटोकॉल स्टैक में स्थायी उपयोग मिला है, चूंकि कम हो रहा है। अनुप्रयोग प्रक्रिया सामग्री के लिए C का उपयोग सामान्यतः कंप्यूटर स्थापत्य पर किया जाता है जो सबसे बड़े महा कंप्यूटर से लेकर सबसे छोटे सूक्ष्म नियंत्रक और अंतः स्थापित प्रणाली तक होता है।
 * paradigm = Multi-paradigm: imperative (procedural), structured
 * designer = Dennis Ritchie
 * developer = ANSI X3J11 (ANSI C); ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 14 (Working Group 14) (ISO C)
 * latest release version = C17
 * latest release date = June 2018
 * latest preview version = C2x (N3054)
 * latest preview date = September 3, 2022
 * typing = Static, weak, manifest, nominal
 * implementations = pcc, GCC, Clang, Intel C, C++Builder, Microsoft Visual C++, Watcom C
 * dialects = Cyclone, Unified Parallel C, Split-C, Cilk, C*
 * 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), Nim, Zig
 * operating system = Cross-platform
 * year = 1972
 * influenced by = B (BCPL, CPL), ALGOL 68, assembly, PL/I, FORTRAN
 * file ext = .c, .h
 * website = https://www.iso.org/standard/74528.html
 * wikibooks = C Programming

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

एएनएसआईCऔर आईएसओ सी
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 के रूप में अपनाया गया था, जिसे कभी-कभी C90 कहा जाता है। इसलिए, C89 और C90 शब्द ही प्रोग्रामिंग भाषा को संदर्भित करते हैं।

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

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

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

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

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

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

C99 अधिकांश भाग के लिए C90 के साथ संगत है, लेकिन कुछ मायनों में सख्त है; विशेष रूप से, घोषणा जिसमें प्रकार के विनिर्देशक का अभाव है, अब नहीं है  परोक्ष रूप से मान लिया। मानक मैक्रो   मान से परिभाषित किया गया है   यह इंगित करने के लिए कि C99 समर्थन उपलब्ध है। जीएनयू संकलक संग्रह, सन स्टूडियो (सॉफ्टवेयर), और अन्यCसंकलक अब 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 के रूप में प्रकाशित, C17Cप्रोग्रामिंग भाषा के लिए वर्तमान मानक है। यह C11 में दोषों के लिए कोई नई भाषा सुविधाएँ, केवल तकनीकी सुधार और स्पष्टीकरण प्रस्तुत नहीं करता है। मानक मैक्रो  की तरह परिभाषित किया गया है.

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

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

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

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

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

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

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

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


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

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

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

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

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



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



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



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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

यह भी देखें

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

स्रोत

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

अग्रिम पठन

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

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

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

बाहरी संबंध

 * ISOCWorking Group official website
 * ISO/IEC 9899, publicly available officialCdocuments, 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