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

अंगूठाकार|दाएँ|200px|'''सी''' प्रोग्रामन भाषा के रचयिताओं की लिखी पुस्तक का मुखपृष्ठ।

**सी (C)** एक सामान्य उपयोग में आने वाली कम्प्यूटर की प्रोग्रामिंग भाषा है। इसका विकास डेनिस रिची ने बेल्ल टेलीफोन प्रयोगशाला में सन् १९७२ में किया था जिसका उद्देश्य यूनिक्स संचालन तंत्र का निर्माण करना था।

इस समय (२००९ में) 'सी' पहली या दूसरी सर्वाधिक लोकप्रिय प्रोग्रामिंग भाषा है। यह भाषा विभिन्न सॉफ्टवेयर फ्लेटफार्मों पर बहुतायत में उपयोग की जाती है। शायद ही कोई कम्प्यूटर-प्लेटफार्म हो जिसके लिये सी का कम्पाइलर उपलब्ध न हो। सी++, जावा, सी#(C-Sharp) आदि अनेक प्रोग्रामन भाषाओं पर सी भाषा का गहरा प्रभाव देखा जा सकता है।

## सी प्रोग्रामिंग भाषा का इतिहास
सन १९६० में कैम्ब्रिज विश्वविद्यालय ने एक कम्प्यूटर प्रोग्रामिंग भाषा का विकास किया जिसे उन्होने नाम c दिया। इसे सामान्य बोल-चाल की भाषा में बी (*B*) कहा गया। ’बी’ भाषा को सन १९७२ में बेल्ल प्रयोगशाला में कम्प्यूटर वैज्ञानिक डेनिश रिची द्वारा संशोधित किया गया। ’सी’ प्रोग्रामिंग भाषा ’बी’ प्रोग्रामिंग भाषा का ही संशोधित रूप है। ’सी’ को यूनिक्स ऑपरेटिंग सिस्टम और डॉस ऑपरेटिंग सिस्टम दोनो में प्रयोग किया जा सकता है, अन्तर मात्र कम्पाइलर का होता है। यूनिक्स ऑपरेटिंग सिस्टम ’सी’ में लिखा गया ऑपरेटिंग सिस्टम है। यह विशेषत: ’सी’ को प्रयोग करने के लिये ही बनाया गया है अत: अधिकतर ’सी’ का प्रयोग यूनिक्स ऑपरेटिंग सिस्टम पर ही किया गया है।

सी-भाषा मामूली अन्तर के साथ कई उपभाषाओं (*dilects*) के रूप में मिलती है। अमेरिकी राष्ट्रीय मानक संस्थान (*अमेरिकन नेशनल स्टैण्डर्ड्स इंस्टीट्यूट*) (***ANSI***) द्वारा विकसित ***ANSI C*** को अधिकतर मानक माना जाता है।

## ’सी’ प्रोग्रामिंग भाषा की विशेषताएं
(१) इस प्रोग्रामिंग भाषा की सबसे महत्वपूर्ण विशेषता यह है कि इसमे उच्च स्तरीय प्रोग्रामिंग भाषा के समस्त गुण तो है ही, साथ ही इसमे निम्न स्तरीय भाषा के समस्त गुण पाए जाते है। उच्च स्तरीय भाषाएं *[[फ़ोरट्रान]]*, *[[कोबोल]]* भी है लेकिन इसमे निम्न स्तरीय भाषा के गुण नहीं पाए जाते।

(२) इस प्रोग्रामिंग भाषा में तैयार किये गये प्रोग्राम की गति अपेक्षाकृत तीव्र होती है। यह ० से १५००० तक गिनने में लगभग एक सेकण्ड का समय लगाती है जबकि बेसिक में इस कार्य में लगभग ५० सेकण्ड लगते है।

(३) ’सी’ प्रोग्रामिंग भाषा में प्रोग्राम में प्रयोग करने हेतु अनेक *functions* परिभाषित होते है परन्तु इसमे एक अतिरिक्त सुविधा यह भी है कि प्रोग्रामर अपनी आवश्यकतानुसार नए *functions* भी परिभाषित कर सकता है।

(४) इसमे मात्र ३२ की शब्दों का प्रयोग होता है इसके साथ ही इसमे अनेक अन्य सहायक प्रोग्राम भी होते है जिसकी सहायता से जटिल *functions* भी सफलतापूर्वक किए जा सकते है।

(५) यह मुख्यत: गणित, विज्ञान एवं सिस्टम संबंधित कार्यो के काम आती है।

(६) इस भाषा में निर्देश देते समय *lower case letters* का ही प्रयोग किया जाता है।

उपरोक्त विशेषताओ के कारण ही ’सी’ एक अत्यधिक लोकप्रिय कम्प्यूटर प्रोग्रामिंग भाषा है।

## सी प्रोग्राम की संरचना और इसके घटक
* हैडर संचिका (Header Files)
* Compiler Directives
* Function Prototypes
* फलन परिभाषा (Function Definition)
* मुख्य फलन (Main Function)
इससे पहले हम यह जान चुके हैं कोई भी चर संगणक की मेमोरी (memory) में किस तरह से संरक्षित होता है। जहाँ यह चर संरक्षित होता है उसका एक निश्चित पता भी होता है जो यह बताता है कि चर का मान मेमोरी में कहाँ संरक्षित है। इस पते को ही पोइंटर (pointer) कहते हैं। C/C++ प्रोग्रामन भाषा में यह सुविधा भी होती है कि किसी चर का पता ज्ञात किया जा सकें (चर का पता = वह मेमोरी में पता/वह स्थान जहाँ चर का मान संरक्षित है)। C/C++ प्रोग्रामन भाषा में भी चर का पता जानने के लिए & का उपयोग करते हैं। जैसे कि अगर कोई पूर्णांक चर *x* (सी में int x; के रूप में परिभाषित) है तो *x* का पता &x से मिल जायेगा। जिस प्रकार पूर्णांक, अक्षर, वास्तविक संख्या (क्रमशः int, char, float) इत्यादि को चर में संरक्षित किया जाता हैं उसी तरह किसी चर के पत्ते को भी। इसके लिए एक नया डाटाटाईप (datatype) होता है जो पता संरक्षित करने के काम आता है जिस तरह से पूर्णांक संरक्षित करने के लिए int datatype का उपयोग होता है। किसी पूर्णांक चर का पता संरक्षित करने के लिए int* datatype का उपयोग करते हैं। इसी तरह अक्षर चर (char variable) का पता संरक्षित करने के लिए char* datatype का उपयोग करते हैं। नीचे एक छोटा सा उदाहरण यह दिया गया है जिसमें एक चर में दूसरे चर का पता (address) संरक्षित करते हैं।

यहाँ पहले एक पूर्णांक चर *x* परिभाषित किया गया है, फिर *p* ऐसा चर परिभाषित किया है जो किसी पूर्णांक का पता (address) संरक्षित करता है। फिर *p* चर में x का पता डाल दिया है। (जैसा कि ऊपर लिखा है किसी भी चर का पता जानने के लिए & का उपयोग करते हैं।)

पता (Address)→	0	1	2	3	4
मेमोरी (Memory)→ 	10000111	11100101	00100110	0000101 	01100101 	. . . 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↑&nbsp;&nbsp;
p = &x = 3	int x	

अब चर एक पूर्णांक पोइंटर (int*) p है जिसमें चर *x* का पता संरक्षित है अर्थात p को लिखवाने पर x का पता लिखा जायेगा। (ऊपर दिखाए गए अनुसार यहाँ पर *x* का पता 3 है परन्तु अलग अलग समय पर C/C++ प्रोग्राम चलन के दौरान पता अलग अलग आएगा) यदि हमें यह जानना है कि p में जिस मेमोरी का पता लिखा हुआ उस मेमोरी पर क्या संरक्षित है तो *p का उपयोग करते हैं (यहाँ p में उस मेमोरी का पता है जहाँ x है और उस मेमोरी अर्थात x में 5 संरक्षित है अतः *p यहाँ पर 5 देगा। इसका एक छोटा सा उदाहरण निम्नलिखित है




## प्रोग्राम लिखने के नियम
’सी’ प्रोग्रामिंग भाषा में किसी भी प्रोग्राम का निष्पादन (execution) करने के लिये हमे एक **main()** फंक्शन अवश्य लिखना होता है। ( its also need preprocessor directory this #include keyword )क्योंकि ’सी’ कम्पाइलर किसी भी प्रोग्राम को निष्पादित करना main() फंक्शन से आरंभ करता है। एक संचिका अथवा एक प्रोग्राम में एक से अधिक main() फंक्शन नहीं हो सकते।
 #include
 main()
 {
 .........
 .........
 return0
 }
यह एक प्रयोगकर्ता द्वारा परिभाषित फंक्शन है। *main()* फंक्शन को **’{’** कोष्ठक द्वारा आरंभ किया जाता है। प्रोग्राम संचिका के निष्पादन के समय ’{’ यह बताता है कि निष्पादन यहाँ से आरंभ करना है। इसी प्रकार **’}’** यह बताता है कि निष्पादन यहाँ समाप्त होना है। एक प्रोग्राम में *main()* फंक्शन तो एक ही रहता है परन्तु अन्य फंक्शन का प्रयोग किया जा सकता है। प्रत्येक फंक्शन के लिये **{** और **}**
के मध्य उपप्रोग्राम दिया जाता है। प्रत्येक निर्देश का अन्त सेमीकालम **’;’** द्वारा होना आवश्यक है।
 
; सी-प्रोग्राम का एक उदाहरणः

```
#include<stdio.h>
main()
{
printf("/nMY NAME IS......./n");
}
```


इस प्रोग्राम को चलाने पर इसका आउटपुट निम्नवत होगा:

एक अन्य उदाहरण

## इन्हें भी देखें
* प्रोग्रामिंग भाषा
* सी++
* जावा प्रोग्रामिंग भाषा
* C Language - Beginners के लिए Practical Tip

## बाहरी कड़ियाँ
* Learn:C/C++ Programming language tutorial in Hindi
* प्रोग्रामिंग के विविध टॉपिक्स पर इ-पुस्तकें
* विडियो से सरल भाषा मे प्रोग्रामिंग सीखिये।
* हिन्दी मे सी प्रोग्रमिग के वीडीयो 
* ध्वन्यात्मक अनुवाद पुस्तकालय अब ओपनसोर्स है !!
* सी भाषाओं के परिवार का इतिहास
* सी में प्रोग्रामिंग के लिए उत्तम आचरण
* वर्तमान तकनीकी मानक (तकनीकी कौरिजेन्डा सहित सी९९, टीसी१, टीसी२ और टीसी३ समेत)
* मानक प्रारूप एन्सी सी (एएनएसआई एक्स३जे११/८८-०९०), तृतीय सार्वजनिक समीक्षा (१३ मई १९८८)
* आईएसओ सी कार्य समूह (आधिकारिक जालस्थल)
* ''सी प्रोगामन भाषा का विकास'' डेनिस रिची द्वारा
* कॉम्प.लैन्ग.सी बहुधा पूछे जाने वाले प्रश्न
* सी पुस्तक एम.बानहान-डी.ब्रैडी-एम.डोरन (एडिसन-वीज़ली, २रा संस्करण) — आरंभिक और मध्यवर्ती छात्रों, निशुल्क डाउनलोड, अब प्रकाशन से बाहर
* ''नया सी मानक: एक आर्थिक और सांस्कृतिक टिप्पणी'' — एक अप्रकाशित पुस्तक "सी भाषा के लिए अंतर्राष्ट्रीय मानको का विस्तृत विश्लेषण।"
* एक नया सी कम्पाइलर केन थॉम्प्सन का शोधपत्र
* Star (*) pattern programs in the c programming language

श्रेणी:सॉफ्टवेयर
श्रेणी:संगणक अभियान्त्रिकी
श्रेणी:कंप्यूटर
श्रेणी:प्रोग्रामिंग भाषा