پرش به محتوا

زبان برنامه نویسی سی/آشنایی با زبان سی C

ویکی‎کتاب، کتابخانهٔ آزاد


زبان سی C یک زبان برنامه‌نویسی همه‌منظوره و دستورگراست که از برنامه‌نویسی ساختارگرا و حوزه‌ای پشتیبانی می‌نماید. زبان سی توسط دنیس مک‌آلیستر ریچی در بین سالهای ۱۹۶۹ تا ۱۹۷۳ جهت سهولت در نوشتن سیستم‌عاملی که اختصاصاً Unix را شامل میشد در آزمایشگاه بل اختراع شد . روز به روز بر محبوبیت زبان سی افزوده شد و به یک زبان برنامه‌نویسی مهم در دنیای برنامه‌نویسی تبدیل شد . زبان سی نزدیک‌ترین زبان برنامه‌نویسی رایج ، به زبان اسمبلی سطح بالا می‌باشد

دنیس ریچی در ژاپن ، پس از دریافت جایزه بنیاد علوم و تکنولوژی ژاپن در می ۲۰۱۱

در سال ۱۹۷۸ ، دنیس ریچی با همکار خود ، برایان ویلسون کرنیگان کتاب «زبان برنامه‌نویسی سی» را به رشته تحریر در آوردند که به عنوان اولین کتاب آموزشی این زبان ثبت شده است . ده سال بعد ، یعنی در سال ۱۹۸۸ دوباره نسخه دیگری را روانه بازار کردند که نسخه دوم « زبان برنامه‌نویسی سی » بود . سال بعد از آن انستیتوی استانداردسازی آمریکا ( انسی ) ANSI نسخه استانداردی را برای زبان سی تعریف کرد . در سال ۱۹۹۸ نیز دوباره به استانداردسازی زبان سی پرداخت . یک سال بعد سازمان استانداردسازی جهانی ( ISO ) زبان سی را استاندارد بین‌المللی نمود . آغاز کار کامپایلرهای خانگی را می‌توان از همان تاریخ دانست ؛ یعنی زمان استاندارد شدن زبان سی که به اسم ANSI C 98 و ISO C 99 یا C98 و C99 معروف می‌باشند . سازمان استاندارد سازی جهانی ISO یک بار دیگر در سال ۲۰۱۱ و بار دیگر نیز در اواخر سال ۲۰۱۷ استاندارد زبان C را بازتعریف نمود که نسخه سال ۲۰۱۷ که به اسم C18 می‌باشد فرق چندانی با نسخه سال ۲۰۱۱ که به اسم C11 شناخته می‌شود ندارد و استاندارد C11 تقریباً تمام کم و کاست‌های زبان سی را برطرف نمود و C18 نیز به اصلاح نواقص و ایرادات استاندارد قبلی یعنی C11 پرداخت

اولین نسخه کتاب زبان برنامه‌نویسی 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 و BSD با پروانه‌های انتشار آزاد GNU GPL یا BSD به زبان C عرضه شدند که تقریباً تمام کارهایی که بخواهید انجام بدهید را از قبل نوشته‌اند و شما با مجموعه کتابخانه‌های بسیار بزرگ و کاملی مواجه هستید ؛ که در صورتی که بخواهید برنامه خود را آزاد و متن باز ارائه دهید ( Free and Open Source ) متن منبع برنامه را استفاده کرده و یا ویرایش می‌کنید و سپس از آن در برنامه خود استفاده می‌کنید و یا در صورتی بخواهید برنامه خود را تجاری یا متن بسته ارائه دهید ؛ در صورتی که پروانه ( License ) انتشار 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 برای سیستم‌عامل‌ها کامپایل کنید که مشکل زمان‌بر بودن نوشتن برنامه‌های کاربردی ( Applications ) با C را برطرف می‌کند ؛ در کنار رابط‌کاربری GTK که توسط GNU به زبان سی برای لینوکس ، سری سیستم‌عامل‌های BSD ، ویندوز ، سولاریس ، مکینتاش و حتی هایکو و هر سیستم‌عاملی که فکرش را بکنید عرضه می‌شود

برای نوشتن برنامه‌های سی نیاز به مجموعه‌ای از نرم افزارها خواهید داشت . که در صفحه بعدی می توانید آنها را پیدا کرده و مهیّا نمائید . به صورت اختصار ، اول باید یک ویرایشگر متن داشته باشید. در ویندوز برنامه Notepad و در سیستم عامل مک TextEdit و در نسخ مختلف لینوکس ویرایشگرهای متن به همراه سیستم عامل وجود دارند ( نظیر gEdit ) . اما ویرایشگر های متنی همچون ++Notepad یا Geany ، GNU Emacs ، JuffEd ، Programmer's Notepad ، Scribus ، SuperEdi ، Vim ، WinVi یا خیلی از ویرایشگرهای دیگر امکاناتی دارند که سهولت نوشتن و کامپایل برنامه را فراهم می‌نمایند . امکاناتی نظیر تفکیک قسمت‌های برنامه با رنگی کردن ، کلفت کردن ، ایتالیک کردن و از همه مهم‌تر جمع کردن قسمت‌های آن که می‌توانید قسمت‌ها و بلوک‌های متن خود را مدیریت کنید ؛ جستجو و جایگزین کردن‌های پیچیده و کامل ، کدنویسی خودکار و ... که کار را راحت‌تر می‌کنند

پیاده‌سازها ، برنامه بعدی مورد نیاز هستند که عمدتاً کامل هستند و کامپایلر ، لینکر و دیباگر را با هم ارائه می‌کنند . هر کدام از پیاده‌سازها ممکن است علاوه بر زبان استاندارد ، دارای کلیدواژه‌های اضافی باشند که کاربردهای اختصاصی خود را دارند . به علاوه کتابخانه‌هایی را عرضه می‌کنند که استفاده از توابع و ماکروهای آنها ، کار برنامه‌نویس را برای نوشتن برنامه سهولت می‌بخشند

در انتها باید بدانید که برخی نرم‌افزارها مجموعه کاملی از ویراشگر و پیاده‌ساز به همراه تمام یا بخشی از نیاز های برنامه‌نویس مبتدی یا حرفه‌ای ( نظیر ساخت رابط کاربری به صورت گرافیکی و نه کد و دستوری ) را فراهم می‌کنند که به آنها آی.دی.ای IDE گفته می شود و سرنام Integrated Development Environment به معنی محیط تولید یکپارچه می‌باشد . اما استفاده از آنها برای افراد مبتدی توصیه نمی‌شود ، چرا که کار کردن با کامپایلر را یاد نمی‌گیرند و معمولاً نیز برای ایجاد پروژه هستند و کار با آنها برای افراد مبتدی ، ممکن است گیج‌کننده باشد