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

http://www.open-std.org/jtc1/sc22/wg14/ }} C अक्षर C के रूप में उच्चारित' सामान्य-उद्देश्य वाली कंप्यूटर प्रोग्रामिंग भाषा है। यह 1970 के दशक में डेनिस रिची द्वारा बनाया गया था। यह बहुत व्यापक रूप से उपयोगी और प्रभावशाली बना हुआ है। रचना के अनुसार, C की विशेषताएं लक्षित C PU की क्षमताओं को स्पष्ट रूप से दर्शाती हैं। इसे संचालन प्रणाली, डिवाइस ड्राइवर, प्रोटोकॉल स्टैक में स्थायी उपयोग मिला है, चूंकि कम हो रहा है। अनुप्रयोग प्रक्रिया सामग्री के लिए 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 में अन्य भाषाओं में पाई जाने वाली कुछ विशेषताएं सम्मलित नहीं हैं (जैसे वस्तु उन्मुख कार्यकर्म और कचरा संग्रह (कंप्यूटर विज्ञान)), इन्हें अधिकांशतः बाहरी पुस्तकालयों (जैसे, ग्लिब OS या बोहेम GC) के उपयोग के माध्यम से कार्यान्वित या अनुकरण किया जा सकता है। त्र करनेवाला)।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

C 99 ने पांच और शब्द आरक्षित किए:
 * ऑटो
 * ब्रेक
 * मामला
 * चार
 *  स्थिरांक 
 * जारी रखें
 * डिफ़ॉल्ट
 * करें
 *  डबल 
 * अन्य
 *  एनम 
 *  बाहरी 
 *  फ्लोट 
 *  के लिए 
 *  गोटो 
 * अगर
 * <कोड> लंबा 
 * <कोड>रजिस्टर
 * <कोड>वापसी
 * <कोड> लघु 
 * <कोड>हस्ताक्षरित
 * <कोड> आकार 
 * <कोड> स्थिर 
 * <कोड> संरचना 
 * <कोड>स्विच
 * <कोड>संघ
 * <कोड> अहस्ताक्षरित </कोड>
 * <कोड> शून्य </कोड>
 * <कोड>अस्थिर
 * <कोड> जबकि </कोड>
 * <कोड>अस्थिर
 * <कोड> जबकि </कोड>

C 11 ने सात और शब्द आरक्षित किए:
 * <कोड>_बूल
 * <कोड> _कॉम्प्लेक्स</कोड>
 * <कोड>_काल्पनिक</कोड>
 * <कोड> इनलाइन </कोड>
 * <कोड> प्रतिबंधित करें </कोड>


 * <कोड>_Alignas
 * <कोड>_Alignof
 * <कोड> _ परमाणु </ कोड>
 * <कोड> _ सामान्य </ कोड>
 * <कोड> _ थ्रेड_लोकल </ कोड>
 * <कोड> _ थ्रेड_लोकल </ कोड>
 * <कोड> _ थ्रेड_लोकल </ कोड>

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

बार वेब डेवलपमेंट के लिए उपयोगी किया गया
ऐतिहासिक रूप से,C को कभी-कभी वेब एप्लिकेशन, सर्वर और ब्राउज़र के बीच सूचना के लिए गेटवे के रूप में कॉमन गेटवे इंटरफ़ेस (C GI) का उपयोग करके वेब विकास के लिए उपयोग किया जाता था। 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 या C ERT कोडिंग मानक, बग के अवसर को कम करने के प्रयास में। सामान्य कमजोरियों की गणना जैसे डेटाबेसC आदि की कमजोरियों को कम करने के तरीकों की गणना करने का प्रयास करते हैं, साथ ही शमन के लिए सिफारिशें भी करते हैं।

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

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

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

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

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

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

C ++ और ObjeC tive-C के अतिरिक्त, C h (कंप्यूटर प्रोग्रामिंग), C ilk और Unified Parallel C ,C के लगभग सुपरसेट हैं।

यह भी देखें

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

स्रोत

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

अग्रिम पठन

 * (sourC e)
 * (free)
 * (arC hive)
 * (arC hive)
 * (free)
 * (free)
 * (free)
 * (free)

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

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

बाहरी संबंध

 * ISOC Working Group offiC ial website
 * ISO/IEC 9899, publiC ly available offiC ialC doC uments, inC luding the C 99 Rationale
 * (3.61 MB)
 * C omp.lang.C Frequently Asked Questions
 * A History of C, by Dennis RitC hie
 * C Library ReferenC e and Examples