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

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

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

C प्रोग्राम स्रोत विवरण मुक्त रूप भाषा मुक्त प्रारूप है, जिसमें विवरण (प्रोग्रामिंग) विभाजक के रूप में सेमीकोलन का उपयोग किया जाता है और कथन के समूहीकरण खंड के लिए घुंघराले ब्रेसिज़ होते हैं।

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

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

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

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

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

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

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

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

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

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

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

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

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

उदाहरण के लिए: long some_function; /* This is a function declaration, so the compiler can know the name and return type of this function. */

/* int */ other_function; /* Another function declaration. Because this is an early version of C, there is an implicit 'int' type here. A comment shows where the explicit 'int' type specifier would be required in later versions. */

/* int */ calling_function /* This is a function definition, including the body of the code following in the { curly brackets }. Because no return type is specified, the function implicitly returns an 'int' in this early version of C. */

{

long test1;

register /* int */ test2; /* Again, note that 'int' is not required here. The 'int' type specifier */

/* in the comment would be required in later versions of C. */

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

/* ideally be stored in a register as opposed to within the stack frame. */

test1 = some_function;

if (test1 > 1)

test2 = 0;

else

test2 = other_function;

return test2;

}

इस प्रारूप में विनिर्देशक जो टिप्पणी की गई हैं उन्हें के और R C में छोड़ा जा सकता है, किन्तु बाद के स्टैंडर्डों में आवश्यक हैं।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

C 99 ने पांच और शब्द आरक्षित किए:
 * double
 * long
 * short
 * unsigned
 * void
 * while
 * double
 * long
 * short
 * unsigned
 * void
 * while
 * long
 * short
 * unsigned
 * void
 * while
 * unsigned
 * void
 * while
 * unsigned
 * void
 * while
 * while
 * while

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


 * _static_assert
 * _static_assert
 * _static_assert
 * _static_assert
 * _static_assert
 * _static_assert

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

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

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

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

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

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

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

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

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

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

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

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

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

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

आधुनिक C 99 बाद में का उपयोग करने वाला निम्न उदाहरण संचय पर द्वि-आयामी सरणी का आवंटन और अभिगम के लिए बहु-आयामी सरणी अनुक्रमण का उपयोग दिखाता है जो कई C संकलनकर्ता पर सीमा-जांच का उपयोग कर सकता है। <वाक्यविन्यास प्रकाश लैंग = सी>इंट फंक (इंट एन, इंट एम){

int func(int N, int M) { float (*p)[N][M] = malloc(sizeof *p); if (!p) return -1; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) (*p)[i][j] = i + j;  print_array(N, M, p); free(p); return 1; }

और यहाँ C 99 के Auto VLA फीचर का उपयोग करते हुए समान कार्यान्वयन है।<वाक्यविन्यास प्रकाश लैंग = सी> इंट फंक (इंट एन, इंट एम){ int func(int N, int M)

{  // Caution: checks should be made to ensure N*M*sizeof(float) does NOT exceed limitations for auto VLAs and is within available size of stack. float p[N][M]; // auto VLA is held on the stack, and sized when the function is invoked for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) p[i][j] = i + j;  // no need to free(p) since it will disappear when the function exits, along with the rest of the stack frame return 1; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

C ++ और उद्देश्य -C के अतिरिक्त, Ch (कंप्यूटर प्रोग्रामिंग), Cilk और एकीकृत समानांतर C ,C के लगभग उत्तम चयन हैं।

यह भी देखें

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

स्रोत

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

अग्रिम पठन

 * (sourC e)
 * (free)
 * (arChive)
 * (arChive)
 * (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 RitChie
 * C Library ReferenC e and Examples