سی (پروگرامنگ زبان)

**سی**  ایک عمومی مقاصد کی حامل پروگرامنگ زبان ہے جسے ڈینس ریچی نے 1969ء اور 1973ء کے درمیان میں اے ٹی اینڈ ٹی بیل لیباریٹری (AT&T Bell Labs) میں تیار کیا تھا۔ سی پروگرامنگ زبان کو تیار کرنے کا اصل مقصد یہ تھا کہ اس کے ذریعہ یونکس آپریٹنگ سسٹم پر کام کیا جائے اور اسے مزید ترقی دی جائے۔ سی زبان کا شمار ہر دور میں سب زیادہ استعمال ہونے والی زبانوں میں رہا ہے، اس لیے سی کے کمپائلرز تقریباً سبھی آپریٹنگ سسٹم کے لیے دستیاب ہیں۔
اکثر دوسری پروگرامنگ زبانیں بالواسطہ یا بلاواسطہ طور ہر سی زبان سے متاثر ہوئی ہے، جن میں ڈی، گو، رسٹ، جاوا، جاوا سکرپٹ، پرل، پائیتھون اور پی ایچ پی جیسی زبانیں اور یونکس کا سی شیل بھی شامل ہیں۔

## تاریخ
سی پروگرامنگ زبان کو 1969ء اور 1973ء کے درمیان میں امریکا میں اے ٹی اینڈ ٹی بیل لیباریٹری (AT&T Bell Labarotories) میں بنایا گیا تھا، چونکہ اس زبان کا بیشتر حصہ بی پروگرامنگ زبان سے ماخوذ ہے، اس لیے اس کا نام سی رکھا گیا۔ اصلا یہ زبان یونکس آپریٹنگ سسٹم (UNIX OS) کے پروگرام لکھنے کے لیے بنائی گئی تھی، سی زبان کو انتہائی طاقتور زبان بنایا گیا تاکہ یونکس شیل کو اسمبلی زبان سے سی زبان میں منتقل کیا جاسکے۔
1978ء میں بریان کرنیگن (Brian Kernighan) اور ڈینس ریچی (Dennis Ritchie) نے The C Programming Language کے نام سے کتاب شائع کی جو خاصی مشہور ہوئی، اس کتاب میں سی زبان کی خصوصیات وغیرہ بیان کی گئی ہیں؛ کتاب کا یہ اولین نسخہ عموماً K&R کے نام سے مشہور ہے۔ 1989ء میں امریکی قومی ادارہ برائے معیارات (ANSI) نے سی زبان کے معیار کو شائع کیا جسے عموماً آنسی سی (ANSI C) اور سی89 کہا جاتا ہے۔ اگلے سال 1990ء میں بین الاقوامی تنظیم برائے معیاریت (International Organization for Standardization) نے اسی معیار کو عالمی معیار کے طور پر منظور کر لیا، اسے عموماً سی90 کہا جاتا ہے۔ بعد ازاں 1995ء میں آئیسو (ISO) نے عالمی سپورٹ فراہم کی اور 1999ء میں اس کا نظر ثانی شدہ نسخہ شائع کیا جسے عموماً سی 99 کہا جاتا ہے۔ سی زبان کا حالیہ معیاری نسخہ (جو سی 11 کے نام سے معروف ہے) دسمبر 2011ء میں منظور ہوا۔
سی زبان کی ترقی اور ترویج میں مائیکروسافٹ اور آئی بی ایم جیسی کمپنیوں نے حصہ لیا، اس لیے سی زبان کے عمومی قواعد اور بنیادیں اب تک رائج ہیں اور دوسری ترقی یافتہ زبانیں اسی سے پروان چڑھی ہیں۔ سی خاندان کی سب سے آخری زبان سی شارپ ہے جو سی زبان کی از حد ترقی یافتہ شکل سمجھی جاتی ہے اور 2001ء سے 2010ء تک اسی کی کئی اشاعتیں منظر عام پر آچکی ہیں۔

## نحو
سی زبان کے معیاری قواعد مقرر کیے گئے ہیں۔ دیگر زبانوں مثلاً فورٹران 77 کے برخلاف سی زبان کا سورس کوڈ فری فارم ہے، جس میں زائد خلا (whitespace) کی مکمل اجازت ہے، یعنی سی کمپائلر تمام زائد خلاؤں کو نظر انداز کردیتا ہے۔ کوڈز میں تبصرے تحریر کرنے کے لیے یا تو ڈیلیمیٹرز (delimiters) `/*` `*/` یا (سی 99 سے ) `//` سطر کے اختتام تک استعمال کیے جاتے ہیں۔

### کیریکٹر سیٹ
بنیادی سی سورس کیریکٹر سیٹ میں درج ذیل محارف شامل ہیں:
* لوور کیس اور اپرکیس حروف: `a`–`z` `A`–`Z`
* عشری اعداد: `0`–`9`
* گرافک کیریکٹرز: `! " # % & ' ( ) * + , - . / : ; <=> ? [ \ ] ^ _ { | } ~`

تازہ ترین سی معیار (سی 11) میں غالباً سی کے سورس ٹیکسٹ میں یونیکوڈ کیریکٹرز شامل کرنے کی اجازت دی ہے، کسی بھی یونیکوڈ کیریکٹر کو شامل کرنے کے لیے `\u''DDDD''` استعمال کیا جا سکتا ہے، اس میں *DDDD* کی بجائے یونیکوڈ کیریکٹر کوڈ درج کیا جاتا ہے، تاہم اس اضافہ کو بڑے پیمانے پر استعمال نہیں کیا جا رہا ہے۔

### کلیدی الفاظ
سی 89 میں 32 کلیدی الفاظ (keywords) (ایسے الفاظ جو مخصوص مفہوم کے حامل ہیں) ہیں:

:`auto`
:`break`
:`case`
:`char`
:`const`
:`continue`
:`default`
:`do`

:`[[double precision|double]]`
:`else`
:`[[enumerated type|enum]]`
:<code>extern</code>
:`[[floating point|float]]`
:`[[for loop|for]]`
:`[[goto]]`
:`if`

:`int`
:`[[long integer|long]]`
:`register`
:`return`
:`[[short integer|short]]`
:`signed`
:`sizeof`
:<code>static</code>

:`[[struct (سی پروگرامنگ زبان)|struct]]`
:`[[switch statement|switch]]`
:`typedef`
:`union`
:`unsigned`
:`[[void type|void]]`
:`[[volatile variable|volatile]]`
:`[[while loop|while]]`

سی 99 میں مزید 5 کلیدی الفاظ کا اضافہ کیا گیا:

:`_Bool`
:`_Complex`

:`_Imaginary`
:`inline`

:`restrict`

سی 11 میں مزید سات کلیدی الفاظ شامل کیے گئے:

:`_Alignas`
:`_Alignof`

:`_Atomic`
:`_Generic`

:`_Noreturn`
:`_Static_assert`

:`_Thread_local`

بعد میں شامل کیے جانے والے اکثر کلیدی الفاظ انڈرسکور اور کیپیٹل حرف سے شروع ہوتے ہیں۔ پہلے سی زبان میں ایک کلیدی لفظ `entry` بھی شامل تھا، لیکن اسے کبھی استعمال نہیں کیا گیا؛ لہذا اب اسے بطور کلیدی لفظ سی زبان سے خارج کر دیا گیا ہے۔

### آپریٹرز
سی زبان میں کثیر تعداد میں آپریٹرز استعمال ہوتے ہیں، آپریٹرز ان علامات (symbols) کو کہا جاتا ہے جو کسی متغیر کی قدر تبدیل کرنے یا کسی بھی ڈیٹا کو بہتر انداز میں پراسس کرنے میں پروگرام کو مدد فراہم کرتے ہیں، مثلاً کسی دو متغیرات کو جمع کرنے کے لیے + کی علامت استعمال کی جاتی ہیں۔ سی میں درج ذیل آپریٹرز استعمال ہوتے ہیں:
* حسابی: <code>+</code>، تفریق (ریاضی)، ضرب (ریاضی)، <code>/</code>، <code>%</code>
* اسائنمنٹ: `=`
* آگمنٹڈ اسائنمنٹ: `+=`، `-=`، `*=`، `/=`، `%=`، `&=`، `|=`، `^=`، `&lt;&lt;=`، `&gt;&gt;=`
* بٹ وائز لاجک: `~`، `&`، `|`، `^`
* بٹ وائز شفٹs: `&lt;&lt;`، `&gt;&gt;`
* بولین لاجک: `!`، `&&`، `||`
* کنڈیشنل ایوولیوشن: <code>? :</code>
* ایکوالٹی ٹیسٹنگ: <code>
= =
</code>، <code>!=</code>
* کالنگ فنکشنز: `( )`
* انکریمنٹ اور ڈیکریمنٹ: `++`، `--`
* ممبر سیلیکشن: `.`، `->`
* آبجیکٹ سائز: `[[sizeof]]`
* آرڈر ریلیشن: `&lt;`، `&lt;=`، `&gt;`، `&gt;=`
* ریفرینس اور ڈی ریفرینس: `&`، `*`، `[ ]`
* سیکوینسنگ: <code>,</code>
* سب ایکسپریشن گروپنگ: `( )`
* ٹائپ کنورژن: `(''typename'')`

سی زبان میں `=` آپریٹر کسی بھی قدر (value) کو اسائن کرنے کے لیے استعمال کیا جاتا ہے، جبکہ ریاضیات میں یہ علامت برابر کے لیے استعمال ہوتی ہے؛ جبکہ سی زبان میں برابر کے لیے دوہری علامت `
= =
` استعمال کی جاتی ہیں۔ تاہم سی زبان کے اس نظام پر تنقیدیں بھی کی گئی ہیں۔

## ہیلو ورلڈ پروگرام
ہیلو ورلڈ پروگرام کسی بھی پروگرامنگ زبان کا پہلا تعارفی پروگرام ہوتا ہے اور پروگرامنگ زبانوں کی تمام کتابوں میں اس تعارفی پروگرام کو بیان کیا جاتا ہے۔ سی زبان میں ہیلو ورلڈ پروگرام کی سادہ مثال جو K&R کی پہلی اشاعت میں سامنے آئی تھی:


```c
main()
{
 printf("hello, world\n");
}
```

معیاری ہیلو ورلڈ پروگرام:


```c
#include <stdio.h>

int main(void)
{
 printf("hello, world\n");
}
```


ان مثالوں کو ایڈیٹر میں تحریر کرنے کے بعد کمپائل کریں تو سکرین پر hello, world لکھا نظر آئے گا۔
پروگرام کی پہلی سطر جس کا آغاز `#include`سے ہوتا ہے پری پروسیسنگ ڈائریکٹو کہلاتی ہے۔ اس سطر کا کام یہ ہوتا ہے کہ `[[stdio.h]]` کے تمام متن کو اس سطر سے تبدیل کر دے جو معیاری ان پٹ اور آؤٹ پٹ (input and output) فنکشنز کے ڈکلیریشن پر مشتمل ہو، جیسے `printf`۔ 
دوسری سطر میں موجود `main` اس بات کا اشارہ کر رہا ہے کہ فنکشن کا نام main ہے۔ `int` کا مطلب یہ ہے کہ مین فنکشن میں جو ویلیو ریٹرن ہوگی وہ انٹیجر (integer) ہوگی۔ اور `void` کا مطلب یہ ہے کہ یہ فنکشن کوئی آرگیومنٹ نہیں لے گا۔
افتتاحی کرلی بریس (curly brace) `{` اس بات کا اشارہ ہے کہ یہاں سے `main` فنکشن کا آغاز ہو رہا ہے۔ اگلی سطر میں موجود `printf` سی زبان کی معیاری لائبریری کا ایک فنکشن ہے، اس فنکشن کا کام یہ ہوتا ہے کہ آگے موجود قوسین میں واوین کے درمیان میں درج متن کو سکرین پر پرنٹ کرے، مثلا "hello, world"۔ `\n` ایک سکیپ سیکوینس ہے جس کے ذریعہ نئی سطر لی جاتی ہے۔ قوسین کے بعد سطر کے بالکل آخر میں موجود کومہ تحت النقطہ `;` جسے سیمی کولن بھی کہتے ہیں، لگانے سے اس بات کا اشارہ مقصود ہوتا ہے کہ یہاں سٹیٹمنٹ ختم ہو گیا ہے؛ سٹیٹمنٹ کے اختتام پر سیمی کولن لگانا لازمی ہوتا ہے ورنہ پروگرام نہیں چل سکتا۔
اختتامی کرلی بریس `}` اس بات کا اشارہ ہے کہ یہاں `main` فنکشن ختم ہو گیا۔ سی 99 اور اس کے بعد کے معیارات میں `main` فنکشن اختتامی کرلی بریس پر پہنچنے پر `0` کی سٹیٹس ریٹرن کرتا ہے جو فنکشن کو اختتام تک پہنچا دیتا ہے۔ `return 0` کے اندراج سے رن ٹائم سسٹم کامیاب ایگزیکیوشن کرتا ہے۔

## حوالہ جات

زمرہ:امریکی ایجادات
زمرہ:پروسیجرل پروگرامنگ زبانیں
زمرہ:پروگرامنگ زبانیں مع آئیسو معیار
زمرہ:خاندان سی پروگرامنگ زبان
زمرہ:سی پروگرامنگ زبان
زمرہ:سٹرکچرڈ پروگرامنگ زبانیں
زمرہ:کراس پلیٹ فارم سافٹ ویئر
زمرہ:لو لیول پروگرامنگ زبانیں
زمرہ:ہائی لیول پروگرامنگ زبانیں
زمرہ:ویکی ڈیٹا سے مطابقت رکھنے والی مختصر تفصیل