C Language ट्यूटोरियल
C भाषा से शुरुआत करना
खोज…
टिप्पणियों
C एक सामान्य उद्देश्य, अनिवार्य कंप्यूटर प्रोग्रामिंग भाषा है, जो संरचित प्रोग्रामिंग, लेक्सिकल वैरिएबल स्कोप और रिकर्सन का समर्थन करती है, जबकि एक स्थिर प्रकार की प्रणाली कई अनपेक्षित कार्यों को रोकती है। डिजाइन के अनुसार, C विशिष्ट मशीन निर्देशों को कुशलतापूर्वक मानचित्र प्रदान करता है, और इसलिए यह उन अनुप्रयोगों में स्थायी उपयोग करता है जिन्हें पूर्व में असेंबली भाषा में कोडित किया गया था, जिसमें ऑपरेटिंग सिस्टम, साथ ही सुपर कंप्यूटर से लेकर एम्बेडेड सिस्टम तक के कंप्यूटरों के लिए विभिन्न एप्लिकेशन सॉफ़्टवेयर शामिल हैं। ।
अपनी निम्न-स्तरीय क्षमताओं के बावजूद, भाषा को क्रॉस-प्लेटफॉर्म प्रोग्रामिंग को प्रोत्साहित करने के लिए डिज़ाइन किया गया था। एक मानक-आज्ञाकारी और आंशिक रूप से लिखे गए सी प्रोग्राम को कंप्यूटर प्लेटफॉर्म और ऑपरेटिंग सिस्टम की एक विस्तृत विविधता के लिए संकलित किया जा सकता है, जिसके स्रोत कोड में कुछ बदलाव किए गए हैं। एम्बेडेड प्लेटफॉर्म से लेकर सुपरकंप्यूटर तक, भाषा बहुत व्यापक स्तर पर उपलब्ध हो गई है।
सी को मूल रूप से डेनिस रिची द्वारा 1969 और 1973 के बीच बेल लैब्स में विकसित किया गया था और यूनिक्स ऑपरेटिंग सिस्टम को फिर से लागू करने के लिए उपयोग किया गया था। तब से यह सभी समय की सबसे अधिक उपयोग की जाने वाली प्रोग्रामिंग भाषाओं में से एक बन गया है, जिसमें मौजूदा कंप्यूटर आर्किटेक्चर और ऑपरेटिंग सिस्टम के अधिकांश के लिए उपलब्ध विभिन्न विक्रेताओं के सी कंपाइलर हैं।
आम संकलक
C प्रोग्राम को संकलित करने की प्रक्रिया संकलक और ऑपरेटिंग सिस्टम के बीच भिन्न होती है। अधिकांश ऑपरेटिंग सिस्टम एक संकलक के बिना जहाज करते हैं, इसलिए आपको एक स्थापित करना होगा। कुछ सामान्य संकलक विकल्प हैं:
- जीसीसी, जीएनयू कम्पाइलर संग्रह
- क्लैंग: एलवीएमएम के लिए एक सी भाषा परिवार का फ्रंट-एंड
- MSVC, Microsoft Visual C / C ++ उपकरण बनाते हैं
निम्नलिखित दस्तावेजों से आपको सबसे सामान्य संकलक में से कुछ का उपयोग शुरू करने के बारे में एक अच्छा अवलोकन देना चाहिए:
कंपाइलर सी वर्जन सपोर्ट
ध्यान दें कि कंपाइलरों में मानक C के समर्थन के स्तर अलग-अलग हैं और कई अभी भी पूरी तरह से C99 का समर्थन नहीं कर रहे हैं। उदाहरण के लिए, 2015 की रिलीज़ के अनुसार, MSVC C99 का बहुत समर्थन करता है, फिर भी भाषा के समर्थन के लिए अभी भी कुछ महत्वपूर्ण अपवाद हैं (जैसे कि प्रीप्रोसेसिंग गैर-अनुरूप लगता है) और सी लाइब्रेरी के लिए (जैसे <tgmath.h>
, न ही) क्या वे आवश्यक रूप से अपने "कार्यान्वयन पर निर्भर विकल्प" का दस्तावेज बनाते हैं। विकिपीडिया में कुछ लोकप्रिय संकलक द्वारा प्रस्तुत तालिका दिखाने का समर्थन है।
कुछ संकलक (विशेष रूप से जीसीसी) ने पेशकश की है या जारी रखना चाहते हैं, संकलक एक्सटेंशन जो अतिरिक्त विशेषताओं को लागू करते हैं जो संकलक उत्पादकों को आवश्यक, सहायक या विश्वास करते हैं, भविष्य के सी संस्करण का हिस्सा बन सकते हैं, लेकिन यह वर्तमान में किसी भी सी मानक का हिस्सा नहीं हैं। चूंकि ये एक्सटेंशन कंपाइलर विशिष्ट हैं, इसलिए इन्हें क्रॉस-संगत नहीं माना जा सकता है और कंपाइलर डेवलपर्स बाद के संकलक संस्करणों में इन्हें हटा या बदल सकते हैं। इस तरह के एक्सटेंशन का उपयोग आमतौर पर कंपाइलर झंडे द्वारा नियंत्रित किया जा सकता है।
इसके अतिरिक्त, कई डेवलपर्स के पास ऐसे कंपाइलर होते हैं जो पर्यावरण या प्लेटफ़ॉर्म द्वारा लक्षित सी के केवल विशिष्ट संस्करणों का समर्थन करते हैं।
यदि एक कंपाइलर का चयन किया जाता है, तो एक कंपाइलर चुनने की सिफारिश की जाती है, जिसमें लक्ष्य वातावरण के लिए अनुमत सी के नवीनतम संस्करण के लिए सबसे अच्छा समर्थन होता है।
कोड शैली (ऑफ-टॉपिक यहाँ):
क्योंकि सी (यानी, यह कोड के संचालन को प्रभावित नहीं करता है) में सफेद स्थान नगण्य है, प्रोग्रामर अक्सर कोड को पढ़ने और समझने में आसान बनाने के लिए सफेद स्थान का उपयोग करते हैं, इसे कोड शैली कहा जाता है । यह स्रोत कोड लिखते समय उपयोग किए जाने वाले नियमों और दिशानिर्देशों का एक समूह है। इसमें इस बात को शामिल किया गया है कि कैसे लाइनों को इंडेंट किया जाए, क्या स्पेस या टैब का इस्तेमाल किया जाए, कैसे ब्रेसेस लगाए जाएं, कैसे ऑपरेटर्स और ब्रैकेट के आसपास स्पेस का इस्तेमाल किया जाए, कैसे वेरिएबल को नाम दिया जाए और आगे क्या किया जाए।
कोड शैली मानक द्वारा कवर नहीं की गई है और मुख्य रूप से राय आधारित है (अलग-अलग लोगों को अलग-अलग शैलियों को पढ़ना आसान लगता है), जैसे, यह आमतौर पर एसओ पर ऑफ-टॉपिक माना जाता है। अपने स्वयं के कोड में शैली के बारे में ओवरराइडिंग सलाह यह है कि स्थिरता सर्वोपरि है - उठाओ, या बनाओ, एक शैली और इसे छड़ी। यह समझाने के लिए पर्याप्त है कि आम उपयोग में विभिन्न नामित शैली हैं जो अक्सर प्रोग्रामर द्वारा अपनी शैली बनाने के बजाय चुनी जाती हैं।
कुछ सामान्य इंडेंट स्टाइल हैं: के एंड आर स्टाइल, ऑलमैन स्टाइल, जीएनयू स्टाइल इत्यादि। इनमें से कुछ शैलियों के अलग-अलग रूप हैं। उदाहरण के लिए, ऑलमैन को नियमित रूप से ऑलमैन या लोकप्रिय संस्करण, ऑलमैन -8 के रूप में उपयोग किया जाता है। कुछ लोकप्रिय शैलियों की जानकारी विकिपीडिया पर मिल सकती है। ऐसे शैली के नाम उन मानकों से लिए जाते हैं जो लेखक या संगठन अक्सर अपने कोड में योगदान करने वाले कई लोगों द्वारा उपयोग के लिए प्रकाशित करते हैं, ताकि हर कोई आसानी से कोड को पढ़ सके जब वे शैली को जानते हैं, जैसे कि GNU प्रारूपण गाइड जो इसका हिस्सा बनता है GNU कोडिंग मानक दस्तावेज़।
कुछ सामान्य नामकरण परंपराएँ हैं: अपरकैमेलकैसे, लोअरकेमसेलकैसे, लोअरकेस_विथ_उंडर्सकोर, ALL_CAPS, आदि। इन शैलियों को विभिन्न वस्तुओं और प्रकारों के साथ उपयोग के लिए विभिन्न तरीकों से जोड़ा जाता है (उदाहरण के लिए, मैक्रोज़ अक्सर ALL_CAPS शैली का उपयोग करते हैं)
के एंड आर शैली को आमतौर पर एसओ प्रलेखन के भीतर उपयोग करने के लिए अनुशंसित किया जाता है, जबकि अधिक गूढ़ शैली, जैसे पिको, को हतोत्साहित किया जाता है।
पुस्तकालय और एपीआई सी मानक द्वारा कवर नहीं किए गए हैं (और इसलिए यहां ऑफ-टॉपिक है):
संस्करण
संस्करण | मानक | प्रकाशन तिथि |
---|---|---|
कश्मीर एंड आर | n / a | 1978/02/22 |
C89 | ANSI X3.159-1989 | 1989/12/14 |
C90 | आईएसओ / आईईसी 9899: 1990 | 1990/12/20 |
C95 | आईएसओ / आईईसी 9899 / एएमडी 1: 1995 | 1995/03/30 |
C99 | आईएसओ / आईईसी 9899: 1999 | 1999/12/16 |
C11 | आईएसओ / आईईसी 9899: 2011 | 2011-12-15 |
नमस्ते दुनिया
एक सरल सी प्रोग्राम बनाने के लिए जो स्क्रीन पर "हैलो, वर्ल्ड" प्रिंट करता है, एक नई फ़ाइल बनाने के लिए एक टेक्स्ट एडिटर का उपयोग करता है (जैसे hello.c
- फाइल एक्सटेंशन होना चाहिए। .c
) जिसमें निम्न स्रोत कोड होता है।
नमस्ते सी
#include <stdio.h>
int main(void)
{
puts("Hello, World");
return 0;
}
आइए इस सरल प्रोग्राम लाइन को लाइन से देखें
#include <stdio.h>
यह लाइन प्रोग्राम में मानक लाइब्रेरी हेडर फ़ाइल stdio.h
की सामग्री को शामिल करने के लिए संकलक को बताती है। हेडर आमतौर पर फ़ंक्शन घोषणाओं, मैक्रोज़ और डेटा प्रकारों वाली फाइलें हैं, और उन्हें उपयोग करने से पहले आपको हेडर फ़ाइल को शामिल करना होगा। इस लाइन में stdio.h
शामिल है, इसलिए इसे फ़ंक्शन puts()
कह सकते हैं।
int main(void)
यह पंक्ति किसी फ़ंक्शन की परिभाषा शुरू करती है। यह फ़ंक्शन ( main
) का नाम बताता है, इसके प्रकार और तर्कों की संख्या यह अपेक्षा करती है ( void
, जिसका अर्थ है कोई नहीं), और मान का प्रकार जो यह फ़ंक्शन रिटर्न ( int
) करता है। कार्यक्रम निष्पादन main()
फ़ंक्शन में शुरू होता है।
{
…
}
घुंघराले ब्रेसिज़ का उपयोग जोड़े में इंगित करने के लिए किया जाता है जहां कोड का एक ब्लॉक शुरू होता है और समाप्त होता है। उनका उपयोग बहुत तरीकों से किया जा सकता है, लेकिन इस मामले में वे इंगित करते हैं कि फ़ंक्शन कहाँ शुरू होता है और समाप्त होता है।
puts("Hello, World");
यह पंक्ति मानक पाठ (स्क्रीन, डिफ़ॉल्ट रूप से), के बाद आउटपुट को puts()
फंक्शन को न्यूलाइन द्वारा कॉल करती है। आउटपुट के लिए स्ट्रिंग कोष्ठकों के भीतर शामिल किया गया है।
"Hello, World"
वह स्ट्रिंग है जिसे स्क्रीन पर लिखा जाएगा। सी में, प्रत्येक स्ट्रिंग शाब्दिक मूल्य डबल कोट्स "…"
अंदर होना चाहिए।
सी कार्यक्रमों में, प्रत्येक कथन को अर्ध-उपनिवेश (यानी ;
) द्वारा समाप्त करने की आवश्यकता होती है।
return 0;
जब हमने main()
परिभाषित किया, तो हमने इसे एक फ़ंक्शन के रूप में घोषित किया जो एक int
रिटर्न दे रहा था, जिसका अर्थ है कि इसे पूर्णांक वापस करने की आवश्यकता है। इस उदाहरण में, हम पूर्णांक मान 0 लौटा रहे हैं, जिसका उपयोग यह इंगित करने के लिए किया जाता है कि प्रोग्राम सफलतापूर्वक समाप्त हो गया है। return 0;
बाद return 0;
बयान, निष्पादन प्रक्रिया समाप्त हो जाएगी।
कार्यक्रम का संपादन
सरल पाठ संपादकों में लिनक्स पर vim
या gedit
, या Windows पर Notepad
शामिल हैं। क्रॉस-प्लेटफ़ॉर्म संपादकों में Visual Studio Code
या Sublime Text
भी शामिल हैं।
संपादक को सादा पाठ फ़ाइलों को बनाना चाहिए, न कि आरटीएफ या किसी अन्य प्रारूप को।
कार्यक्रम को संकलित करना और चलाना
कार्यक्रम चलाने के लिए, इस स्रोत फ़ाइल ( hello.c
) पहले की जरूरत है एक निष्पादन योग्य फ़ाइल में संकलित किया जा करने के लिए (जैसे hello
यूनिक्स पर / लिनक्स सिस्टम या hello.exe
Windows पर)। यह सी भाषा के लिए एक संकलक का उपयोग करके किया जाता है।
जीसीसी का उपयोग कर संकलन करें
जीसीसी (जीएनयू कंपाइलर कलेक्शन) एक व्यापक रूप से इस्तेमाल किया जाने वाला सी कंपाइलर है। इसका उपयोग करने के लिए, एक टर्मिनल खोलें, स्रोत फ़ाइल के स्थान पर नेविगेट करने के लिए कमांड लाइन का उपयोग करें और फिर चलाएं:
gcc hello.c -o hello
यदि स्रोत कोड ( hello.c
) में कोई त्रुटि नहीं पाई जाती है, तो कंपाइलर एक बाइनरी फ़ाइल बनाएगा, जिसका नाम -o
कमांड लाइन विकल्प ( hello
) के तर्क द्वारा दिया गया है। यह अंतिम निष्पादन योग्य फ़ाइल है।
हम चेतावनी के विकल्पों का भी उपयोग कर सकते हैं -Wall -Wextra -Werror
, उन समस्याओं की पहचान करने में मदद करते हैं जो प्रोग्राम को विफल करने या अप्रत्याशित परिणाम उत्पन्न करने का कारण बन सकते हैं। वे इस सरल कार्यक्रम के लिए आवश्यक नहीं हैं, लेकिन उन्हें जोड़ने का यह तरीका है:
gcc -Wall -Wextra -Werror -o hello hello.c
क्लैंग कंपाइलर का उपयोग करना
clang
का उपयोग करके प्रोग्राम को संकलित करने के लिए आप उपयोग कर सकते हैं:
clang -Wall -Wextra -Werror -o hello hello.c
डिजाइन के अनुसार, clang
कमांड लाइन विकल्प जीसीसी के समान हैं।
कमांड लाइन से Microsoft C कंपाइलर का उपयोग करना
अगर एक विंडोज़ सिस्टम पर Microsoft cl.exe
कंपाइलर का उपयोग किया जाता है जो विज़ुअल स्टूडियो का समर्थन करता है और यदि सभी पर्यावरण चर सेट किए जाते हैं, तो इस C उदाहरण को निम्न कमांड का उपयोग करके संकलित किया जा सकता है जो कि डायरेक्टरी में निष्पादित निष्पादन योग्य hello.exe
उत्पादन करेगा जिसे कमांड निष्पादित किया गया है। (वहाँ चेतावनी विकल्प हैं जैसे कि /W3
लिए cl
, मोटे तौर पर अनुरूप के लिए -Wall
आदि के लिए GCC या -Wall
)।
cl hello.c
कार्यक्रम को निष्पादित करना
एक बार संकलित, बाइनरी फ़ाइल तो टाइपिंग द्वारा निष्पादित किया जा सकता ./hello
टर्मिनल में। निष्पादन के बाद, संकलित प्रोग्राम Hello, World
को प्रिंट करेगा, उसके बाद कमांड प्रॉम्प्ट पर एक नई लाइन, द्वारा।
मूल "हैलो, विश्व!" K & R C में
निम्नलिखित मूल है "हैलो, वर्ल्ड!" ब्रायन कर्निघन और डेनिस रिची (रिची, बेल लैब्स में सी प्रोग्रामिंग भाषा के मूल डेवलपर थे) की पुस्तक द सी प्रोग्रामिंग लैंग्वेज से प्रोग्राम "के एंड आर" के रूप में संदर्भित:
#include <stdio.h>
main()
{
printf("hello, world\n");
}
ध्यान दें कि इस पुस्तक (1978) के पहले संस्करण को लिखने के समय C प्रोग्रामिंग भाषा को मानकीकृत नहीं किया गया था, और यह कि यह कार्यक्रम संभवतः अधिकांश आधुनिक संकलकों पर संकलित नहीं होगा, जब तक कि उन्हें C90 कोड स्वीकार करने का निर्देश न दिया जाए।
K & R पुस्तक में यह पहला पहला उदाहरण अब खराब गुणवत्ता वाला माना जाता है, क्योंकि इसमें main()
और भाग के लिए स्पष्ट वापसी प्रकार का अभाव है क्योंकि इसमें return
स्टेटमेंट का अभाव है। पुस्तक का दूसरा संस्करण पुराने C89 मानक के लिए लिखा गया था। C89 में, main
का प्रकार int
लिए डिफ़ॉल्ट होगा, लेकिन K & R उदाहरण पर्यावरण के लिए एक परिभाषित मान नहीं लौटाता है। C99 और बाद के मानकों में, वापसी प्रकार की आवश्यकता होती है, लेकिन main
(और केवल main
) के return
स्टेटमेंट को छोड़ना सुरक्षित है, क्योंकि C99 5.1.2.2.3 के साथ पेश किए गए एक विशेष मामले के लिए - यह 0 लौटने के बराबर है , जो सफलता का संकेत देता है।
होस्ट किए गए सिस्टम के लिए main
का अनुशंसित और सबसे पोर्टेबल रूप int main (void)
जब प्रोग्राम कमांड लाइन तर्क का उपयोग नहीं करता है, या प्रोग्राम में कोई int main(int argc, char **argv)
कमांड int main(int argc, char **argv)
उपयोग नहीं करता है।
C90 .5.1.2.2.3 कार्यक्रम समाप्ति
प्रारंभिक कॉल से
main
फ़ंक्शन के लिए एक वापसी इसके फ़ंक्शन के रूप मेंmain
फ़ंक्शन द्वारा दिए गए मान के साथexit
फ़ंक्शन को कॉल करने के बराबर है। यदिmain
फ़ंक्शन एक रिटर्न निष्पादित करता है जो कोई मूल्य निर्दिष्ट नहीं करता है, तो मेजबान वातावरण में लौटाए गए समाप्ति की स्थिति अपरिभाषित है।
C90 §6.6.6.4 return
स्टेटमेंट
यदि एक अभिव्यक्ति के बिना
return
स्टेटमेंट निष्पादित किया जाता है, और कॉलर द्वारा फ़ंक्शन कॉल के मूल्य का उपयोग किया जाता है, तो व्यवहार अपरिभाषित है। किसी फ़ंक्शन को समाप्त करने वाले}
तक पहुंचना अभिव्यक्ति के बिनाreturn
स्टेटमेंट निष्पादित करने के बराबर है।
C99 .15.1.2.2.3 कार्यक्रम समाप्ति
यदि
main
फ़ंक्शन का रिटर्न प्रकारint
के साथ संगत प्रकार है, तोmain
फ़ंक्शन के लिए प्रारंभिक कॉल से एक वापसी इसके फ़ंक्शन के रूप मेंmain
फ़ंक्शन द्वारा दिए गए मान के साथexit
फ़ंक्शन को कॉल करने के बराबर है;}
तक पहुंचने से जोmain
फ़ंक्शन को समाप्त करता है, 0. का मान देता है। यदि रिटर्न प्रकारint
के साथ संगत नहीं है, तो होस्ट वातावरण में वापस लौटा समाप्ति की स्थिति अनिर्दिष्ट है।