C एक सामान्य उद्देश्य, प्रक्रियात्मक प्रोग्रामिंग भाषा है जो कई आधुनिक प्रोग्रामिंग भाषाओं के विकास में प्रभावशाली रही है। इसे कुशल और लचीला बनाने के लिए डिज़ाइन किया गया है, और यह सामान्यतः सिस्टम प्रोग्रामिंग, ऑपरेटिंग सिस्टम विकसित करने और एप्लिकेशन सॉफ़्टवेयर बनाने के लिए उपयोग किया जाता है। C मेमोरी तक निम्न-स्तरीय पहुँच प्रदान करता है और बिट मैनिपुलेशन की अनुमति देता है, जिससे यह प्रदर्शन-क्रिटिकल सॉफ़्टवेयर लिखने के लिए एक पसंदीदा विकल्प बन जाता है।
C को 1970 के दशक की शुरुआत में डेनिस रिची द्वारा बेल लैब्स में B भाषा के विकास के रूप में विकसित किया गया था, जो BCPL और ALGOL से प्रभावित थी। मूल रूप से, इसे यूनिक्स ऑपरेटिंग सिस्टम पर सिस्टम प्रोग्रामिंग के लिए डिज़ाइन किया गया था, जो भी बेल लैब्स में उत्पन्न हुआ था। भाषा का डिज़ाइन असेंबली भाषा के ऊपर एक उच्च-स्तरीय अमूर्तता प्रदान करने पर केंद्रित था, जबकि निम्न-स्तरीय प्रोग्रामिंग की दक्षता को बनाए रखा गया था।
1970 के दशक के अंत तक, C ने प्रोग्रामिंग समुदाय में व्यापक स्वीकृति प्राप्त की, और 1978 में ब्रायन केर्निगन और डेनिस रिची द्वारा "The C Programming Language" के प्रकाशन ने इसकी लोकप्रियता में महत्वपूर्ण योगदान दिया। पहला मानकीकृत संस्करण, जिसे C89 या ANSI C कहा जाता है, को 1989 में अमेरिकी राष्ट्रीय मानक संस्थान (ANSI) द्वारा अपनाया गया। इसके बाद अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) ने इसे अपनाया, जिसके परिणामस्वरूप 1999 में ISO C99 आया, जिसने इनलाइन फ़ंक्शंस और वेरिएबल-लेंथ एरे जैसी कई नई सुविधाएँ पेश कीं। सबसे हालिया प्रमुख मानक, C11, 2011 में प्रकाशित हुआ, और C18, एक बग फिक्स रिलीज, 2018 में आया।
C आज भी दुनिया की सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषाओं में से एक है, विशेष रूप से सिस्टम प्रोग्रामिंग, एम्बेडेड सिस्टम और उच्च-प्रदर्शन अनुप्रयोगों में। इसकी सिंटैक्स और अवधारणाओं ने C++, C#, Java, और Objective-C जैसी कई अन्य भाषाओं को प्रभावित किया है। इसके निरंतर प्रासंगिकता को ऑपरेटिंग सिस्टम (Linux, Windows), नेटवर्क प्रोग्रामिंग, एम्बेडेड सिस्टम, और विभिन्न उच्च-प्रदर्शन कंप्यूटिंग कार्यों में देखा जा सकता है।
C पॉइंटर्स के माध्यम से मेमोरी का प्रत्यक्ष मैनिपुलेशन करने की अनुमति देता है। उदाहरण के लिए:
int x = 10;
int *p = &x; // पॉइंटर p x का पता रखता है
C फ़ंक्शंस के माध्यम से संरचित प्रोग्रामिंग का समर्थन करता है, जिससे कोड मॉड्यूलरिटी संभव होती है। एक साधारण फ़ंक्शन परिभाषा इस तरह दिखती है:
void greet() {
printf("Hello, World!\n");
}
C में विभिन्न नियंत्रण प्रवाह संरचनाएँ शामिल हैं जैसे if, switch, for, while, और do-while, जो निर्णय लेने में सहायक होती हैं।
if (x > 0) {
printf("सकारात्मक संख्या\n");
}
C में कई अंतर्निहित डेटा प्रकार हैं: int, char, float, double, आदि। यह संरचनाओं का उपयोग करके उपयोगकर्ता-परिभाषित डेटा प्रकारों का भी समर्थन करता है।
struct Point {
int x;
int y;
};
C में इनपुट/आउटपुट संचालन, स्ट्रिंग मैनिपुलेशन, और गणितीय गणनाओं के लिए एक समृद्ध पुस्तकालय सेट शामिल है।
#include <stdio.h>
#include <math.h>
double sqrtValue = sqrt(16);
C स्पष्ट प्रकार रूपांतरण की अनुमति देता है, जो प्रकारों के बीच रूपांतरण के लिए उपयोगी होता है।
double pi = 3.14;
int intPi = (int)pi; // intPi 3 होगा
C कस्टम प्रकार बनाने के लिए अनुक्रमित प्रकारों का समर्थन करता है।
enum Color { RED, GREEN, BLUE };
C में प्रीप्रोसेसर निर्देश शामिल हैं जैसे #define, #include, जो संकलन से पहले कोड को संभालते हैं।
#define PI 3.14
C एक विशिष्ट स्कोप के भीतर चर घोषणाओं की अनुमति देता है, जिससे एनकैप्सुलेशन में सुधार होता है।
{
int temp = 5; // temp केवल इस ब्लॉक के भीतर मान्य है
}
C फ़ंक्शन ओवरलोडिंग का समर्थन नहीं करता है जैसे C++, लेकिन यह मैन्युअल कार्यान्वयन के माध्यम से डिफ़ॉल्ट तर्कों की अनुमति देता है।
int add(int a, int b) {
return a + b;
}
C को स्रोत कोड को मशीन कोड में परिवर्तित करने के लिए एक संकलक की आवश्यकता होती है। सबसे लोकप्रिय संकलकों में GCC (GNU Compiler Collection), Clang, और MSVC (Microsoft Visual C++) शामिल हैं।
C प्रोग्राम को संकलित करने के लिए, आप आमतौर पर एक कमांड का उपयोग कर सकते हैं:
gcc -o myprogram myprogram.c
यह myprogram.c
को myprogram
नामक एक निष्पादन योग्य में संकलित करता है।
कई IDEs C प्रोग्रामिंग का समर्थन करते हैं, जैसे:
ये IDEs सिंटैक्स हाइलाइटिंग, डिबगिंग उपकरण, और प्रोजेक्ट प्रबंधन जैसी सुविधाएँ प्रदान करते हैं।
C का उपयोग विभिन्न क्षेत्रों में व्यापक रूप से किया जाता है, जिसमें शामिल हैं:
C को अक्सर कई अन्य प्रोग्रामिंग भाषाओं के साथ तुलना की जाती है, क्योंकि यह समानताएँ साझा करता है और कई के लिए एक आधार के रूप में कार्य करता है:
C को उन भाषाओं में अनुवादित किया जा सकता है जो प्रक्रियात्मक प्रोग्रामिंग संरचनाओं और निम्न-स्तरीय अनुकूलन का समर्थन करती हैं। जब C को उच्च-स्तरीय भाषा में अनुवादित किया जाता है, तो डेवलपर्स को मेमोरी प्रबंधन के अंतर पर ध्यान देना चाहिए, क्योंकि उच्च-स्तरीय भाषाएँ अक्सर गारबेज कलेक्शन की विशेषताएँ होती हैं।
कई स्रोत-से-स्रोत अनुवाद उपकरण हैं जो C को अन्य भाषाओं में परिवर्तित करने में मदद कर सकते हैं, जिनमें शामिल हैं: