زبان سی C یک زبان برنامهنویسی همهمنظوره و دستورگراست که از برنامهنویسی ساختارگرا و حوزهای پشتیبانی می نمایدمینماید. زبان سی توسط دنیس مک آلیسترمکآلیستر ریچی در بین سالهای ۱۹۶۹ تا ۱۹۷۳ جهت سهولت در نوشتن سیستمعاملی که اختصاصاً Unix را شامل میشد در آزمایشگاه بل اختراع شد . روز به روز بر محبوبیت زبان سی افزوده شد و به یک زبان برنامهنویسی مهم در دنیای برنامهنویسی تبدیل شد . زبان سی نزدیکترین زبان برنامهنویسی رایج ، به زبان اسمبلی سطح بالا میباشد
[[پرونده:Dennis Ritchie 2011.jpg|بندانگشتی|چپ|دنیس ریچی در ژاپن ، پس از دریافت جایزه بنیاد علوم و تکنولوژی ژاپن در می ۲۰۱۱]]
در سال ۱۹۷۸ ، دنیس ریچی با همکار خود،خود ، برایان ویلسون کرنیگان کتاب «زبان برنامهنویسی سی» را به رشته تحریر در آوردند که به عنوان اولین کتاب آموزشی این زبان ثبت شده است . ده سال بعد،بعد ، یعنی در سال ۱۹۸۸ دوباره نسخه دیگری را روانه بازار کردند که نسخه دوم « زبان برنامهنویسی سی » بود . سال بعد از آن انستیتوی استاندارد سازیاستانداردسازی آمریکا ( انسی ) )ANSI نسخه استانداردی را برای زبان سی تعریف کرد . در سال ۱۹۹۸ نیز دوباره به استانداردسازی زبان سی پرداخت . یک سال بعد سازمان استاندارد سازیاستانداردسازی جهانی ( ISO ) زبان سی را استاندارد بین المللیبینالمللی نمود . آغاز کار کامپایلرهای خانگی را میتوان از همان تاریخ دانست ؛ یعنی زمان استاندارد شدن زبان سی که به اسم ANSI C 98 و ISO C 99 یا C98 و C99 معروف میباشند . سازمان استاندارد سازی جهانی ISO یک بار دیگر در سال ۲۰۱۱ و بار دیگر نیز در اواخر سال ۲۰۱۷ استاندارد زبان C را بازتعریف نمود که نسخه سال ۲۰۱۷ که به اسم C18 میباشد فرق چندانی با نسخه سال ۲۰۱۱ که به اسم C11 شناخته میشود ندارد و استاندارد C11 تقریباً تمام کم و کاستهای زبان سی را برطرف نمود و C18 نیز به اصلاح نواقص و ایرادات استاندارد قبلی یعنی C11 پرداخت
[[پرونده:The C Programming Language, First Edition Cover.svg|بندانگشتی|چپ|اولین نسخه کتاب زبان برنامهنویسی C اثر دنیس ریچی و برایان کرنیگان]]
شاید از خود بپرسید استاندارد به چه معناست ؟ از زمانی که زبان سی تعریف و اختراع شد قابلیتهای بسیار زیادی به رایانه افزوده شدند. برای همین در طول زمان ، ارائه دهندههای بستههای نرمافزاری پیادهساز زبان سی ، همواره هر کدام برای خود کلید واژه هایی را اضافه یا کم میکردند و یا عملکرد دلخواه خود را برای آن به کار میبستند . هر کدام کتابخانه مجزای خود را ایجاد میکردند . استانداردهای ISO در طول این مدت بیشتر نیازهای برنامهنویسی را پوشش میدادند و میدهند اما باز هم برخی از کامپایلرها از استانداردهای قدیمی C98 و یا C99 استفاده میکنند یا با اینکه سازگار با C11 یا C18 هستند به صورت کامل استاندارد را پشتیبانی نمیکنند ، مثلاً برخی کامپایلرها هنوز اجازه استفاده از متون Unicode ( مثل UTF-16 ) را در داخل متن منبع برنامه ( Program Source Code ) نمیدهند
اما چرا C ؟ برخی زبانها خیلی سطح بالا هستند ، مثل Python یا COBOL که با آنها نمیتوانید خیلی از کارها را انجام بدهید ، چون دسترسی به CPU و سختافزار را ندارید ؛ برخی زبانها همتراز، همترازِ زبان C هستند ، اما کارایی و قدرت زبان C را ندارند مثل پاسکال Pascal . در خانواده زبان C و زبانهایی که از آن الگو گرفتهاند ، زبان مشهوری همچون جاوا Java از شرکت Sun Microsystems باز هم قدرت زبان C را ندارند . با جاوا نمیتوان یک کرنل نوشت ، مخصوصاً با تغییراتی که پس از فروخته شدن Sun به Oracle پیش آمد ( که قدرت زبان جاوا ، بسیار ضعیفتر شد ) ؛ همین طور خیلی از ابزارهای قدرتمند ( Tools ) که با سختافزار ارتباط برقرار میکنند و سطح پائین ارتباطنوشته برقرارمیشوند یا میکنندیامثلاً Daemon ها و ... که امکان نوشته شدن در زبانهای سطح بالا را ندارند . در این بین میماند زبان ++C که با کامپایلر C نوشته شد تا کارهایی را سهولت بخشد و قابلیت شیئگرائی را به C اضافه کند و رقیب سرسخت زبان C میباشد . اولاًاول اینکه زبان C قدرت بیهمتایی دارد و دارای کامپایلرها و پیادهسازهای قدرتمندی بوده و هست که قابلیتهای اضافهتر از قدرت زبان استاندارد C را به آن داده و میدهند که با کمک آنها میتوان از ترفندهایی استفاده کرد تاکه به عنوان مثال ، شیئگرایی را در C تقلید کرد ؛ همچنین با قابلیتهایی که در استانداردهای جدید به زبان C اضافه شد برنامهنویسی سطح بالا بسیار راحتتر از قبل شده است ؛ ضمن اینکه پروژههای زیادی در دنیای GNU / Linux و با پروانهپروانههای آزاد GPL یا BSD به زبان C عرضه شدند که تقریباً تمام کارهایی که بخواهید انجام بدهید را از قبل نوشتهاند و شما با مجموعه کتابخانههای بسیار بزرگ و کاملی مواجه هستید ؛ که در صورتی که بخواهید برنامه خود را آزاد و رایگان ارائه دهید ( Source ) متن منبع برناههبرنامه را استفاده کرده و یا ویرایش میکنید و سپس از آن استفاده میکنید و یا در صورتی بخواهید برنامه خود را تجاری یا متن بسته ارائه دهید ؛ در صورتصورتی داشتنکه پروانه انتشار BSD داشته باشد به راحتی میتوانید ایناز کارآنها رادر انجامبرنامه دهیدتجاری و یا متن بسته خود ( Closed Source ) استفاده کنید و در صورتی نیز که برنامه نوشته شده پروانه انتشار عمومی گنیو را داشته باشد ( GNU GPL ) شما میتوانید برنامه را در برنامه خودتان استفاده کنید ولی به صورت کامپایل شده ( و از متن منبع آن در برنامه خود استفاده نکنید ) . شما در زبان C میتوانید از کدهای Assembly نیز استفاده کنید ؛ شاید بگوئید در ++C هم میشود ولی فراموش نکنید که به تازگی پیادهسازهای ++C به وضعیت مطلوبی در مورد پردازندههای ARM رسیدند و از قدیمالایام تا به کنون فقط برای پردازندههای x86 کامپایل میشوند در حالی که زبان C تقریباً برای هر پردازنده و Device ـی دارای کامپایلر است ؛ چه به صورت عمومی در کامپیوترهای خانگی و چه به صورت خصوصی در کمپانیها و شرکتها و کارخانجات که استخدام شوید که البته برای برنامهنویسی سطح پائین ، باید به الکترونیک نیز تسلط داشته باشید . همین طور که میبینید ، قابلیتها و قدرت C باعث محبوبیت بیهمتای آن در بین برنامهنویسان قدر و قهار و مهندسان سختافزار و نرمافزار شده است . ضمن اینکه پروژه GNOME از GNU زبانی را به نام Vala طراحی کرد تا سطح بالاتر از #C از مایکروسافت و Java از Sun و Oracle کد بزنید و سپس کدهای بسیار سطح بالای شما را به کدهای زبان C ترجمه کند که سپس با نگاه انداختن به آن و رفع اشکالهای ( Debug ) برنامه نوشته شده به Vala را که حالا به زبان C ترجمه شده است ، میتوانید برنامه را به زبان C برای سیستمعاملها کامپایل کنید که کار نوشتن برنامههای کاربردی ApplicationApplications که با C ممکن است کمی زمان بر باشند را برطرف میکند در کنار رابطکاربری GTK که توسط GNU به زبان سی برای لینوکس ، سری سیستمعاملهای BSD ، ویندوز ، سولاریس ، مکینتاش و حتی هایکو و هر سیستمعاملی که فکرش را بکنید عرضه میشود
برای نوشتن برنامههای سی نیاز به مجموعهمجموعهای ایاز نرم افزار هاافزارها خواهید داشت . که در صفحه بعدی می توانید آنها را پیدا کرده و مهیّا نمائید . به صورت اختصار ، اول باید یک ویرایشگر متن داشته باشید. در ویندوز برنامه Notepad و در سیستم عامل مک TextEdit و در نسخ مختلف لینوکس ویرایشگرهای متن به همراه سیستم عامل وجود دارند ( نظیر gEdit ) . اما ویرایشگر های متنی همچون ++Notepad یا Geany ، GNU Emacs ، JuffEd ، Programmer's Notepad ، Scribus ، SuperEdi ، Vim ، WinVi یا خیلی از ویرایشگرهای دیگر امکاناتی دارند که سهولت نوشتن و کامپایل برنامه را فراهم مینمایند . امکاناتی نظیر تفکیک قسمتهای برنامه با رنگی کردن ، کلفت کردن ، ایتالیک کردن و از همه مهمتر جمع کردن قسمتهای آن که میتوانید قسمتها و بلوکهای متن خود را مدیریت کنید ؛ جستجو و جایگزین کردنهای پیچیده و کامل ، کدنویسی خودکار و ... که کار را راحتتر میکنند
پیادهسازها ، برنامه بعدی مورد نیاز هستند که عمدتاً کامل هستند و کامپایلر ، لینکر و دیباگر را با هم ارائه میکنند . هر کدام از پیادهسازها ممکن است علاوه بر زبان استاندارد ، دارای کلیدواژههای اضافی باشند که کاربردهای اختصاصی خود را دارند . به علاوه کتابخانههایی را عرضه میکنند که استفاده از توابع و ماکروهای آنها ، کار برنامهنویس را برای نوشتن برنامه سهولت میبخشند
در انتها باید بدانید که برخی نرمافزارها مجموعه کاملی از ویراشگر و پیادهساز به همراه تمام یا بخشی از نیاز های برنامهنویس مبتدی یا حرفهای ( نظیر ساخت رابط کاربری خودکار ) را فراهم میکنند که به آنها آی.دی.ای IDE گفته می شود و سرنام Integrated Development Environment به معنی محیط تولید یکپارچه میباشد . اما استفاده از آنها برای افراد مبتدی توصیه نمیشود ، چرا که کار کردن با کامپایلر را یاد نمیگیرند و معمولاً نیز برای ایجاد پروژه هستند و کار با آنها برای مبتدی ، ممکن است گیج کنندهگیجکننده باشد