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

سی  ایک عمومی مقاصد کی حامل پروگرامنگ زبان ہے جسے ڈینس ریچی نے 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) میں غالباً سی کے سورس ٹیکسٹ میں یونیکوڈ کیریکٹرز شامل کرنے کی اجازت دی ہے، کسی بھی یونیکوڈ کیریکٹر کو شامل کرنے کے لیے \uDDDD استعمال کیا جاسکتا ہے، اس میں DDDD کی بجائے یونیکوڈ کیریکٹر کوڈ درج کیا جاتا ہے، تاہم اس اضافہ کو بڑے پیمانے پر استعمال نہیں کیا جا رہا ہے۔

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

auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

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

_Bool
_Complex

_Imaginary
inline

restrict

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

_Alignas
_Alignof

_Atomic
_Generic

_Noreturn
_Static_assert

_Thread_local

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

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

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

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

main()
{
 printf("hello, world\n");
}
معیاری ہیلو ورلڈ پروگرام:

#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 کے اندراج سے رن ٹائم سسٹم کامیاب ایگزیکیوشن کرتا ہے۔

حوالہ جات 

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