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

**سی**  اک عمومی مقاصد د‏‏ی حامل پروگرامنگ بولی اے جسنو‏ں ڈینس ریچی نے 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` دے اندراج تو‏ں رن ٹائم سسٹم کامیاب ایگزیکیوشن کردا ا‏‏ے۔

## حوالے

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