زبان برنامه نویسی C چیست؟ – از صفر تا صد
در این مطلب به بررسی زبان برنامه نویسی C میپردازیم و درمییابیم که این زبان چیست و برای چه کاربردهایی میتوان آن را به کار گرفت. با توجه به اینکه زبان C سالها است مورد استفاده برنامه نویسان قرار گرفته میگیرد، آیا همچنان میتوان از آن استفاده کرد یا خیر؟ تاریخچه این زبان از چه زمانی بوده و آیا نسخههای جدیدتری از آن تا به حال ساخته شده است؟ برای نوشتن سادهترین کد برنامه نویسی یعنی چاپ کردن عبارت «Hello World» از چه دستوراتی باید استفاده کنیم؟ برای جواب دادن به این سوالات و مباحث بیشتر، در این مطلب با ما همراه باشید.
زبان برنامه نویسی C چیست ؟
زبان C زبان برنامه نویسی همهمنظوره و سطح بالا است. این زبان رابط کاربری ساده، سازگار و قدرتمند برای برنامه نویسی سیستمها فراهم میکند. به همین دلیل از زبان C برای توسعه نرم افزارهای سیستمی، نرم افزارهای کاربردی و «سیستمهای تعبیه شده» (Embedded Systems) استفاده میشود. زبان برنامه نویسی C از زبانهای مهم و تأثیرگذار به حساب میآید و بسیاری از زبانهای دیگر از آن مشتق شدهاند. به عنوان مثال، زبانهای برنامه نویسی ++C و جاوا از مشتقهای مدرن و محبوب C هستند.
زبان برنامه نویسی C، زبانی «رویهای» (Procedural) همراه با سیستم استاتیک است. زبان برنامه نویسی C زبانی مستقل از ماشین به حساب میآید که عمدتاً برای ایجاد بسیاری از برنامهها و سیستم عاملها مانند ویندوز و سایر برنامههای پیچیده مانند پایگاه داده اوراکل، گیت، مفسر پایتون و بازیها استفاده میشود و اساس برنامه نویسی در فرآیند یادگیری هر زبان برنامه نویسی دیگری در نظر گرفته میشود.
سیستم عاملها و برنامههای نرم افزاری گوناگون برای معماریهای کامپیوتری، از ابر کامپیوترها تا PLCها و سیستمهای تعبیه شده، نمونههایی از این برنامهها هستند. زبان برنامه نویسی C با ساختارهایی ایجاد شد که به خوبی به دستورالعملهای سختافزاری رایج منتقل میشوند و سابقه طولانی استفاده در برنامههایی را دارد که قبلا به زبان اسمبلی نوشته شده بودند.
پیش از ادامه این مبحث لازم است یادآور شویم که میتوانید برنامهنویسی C را با استفاده از مجموعه آموزش سی، مقدماتی تا پیشرفته
فرادرس یاد بگیرید.
زبان برنامه نویسی C چیست ؟ یک انتخاب عالی برای برنامه نویسی سیستمی است. به عنوان نمونه، میتواند گزینه مناسبی برای توسعه سیستم عاملها، کامپایلرها و درایورهای شبکه باشد. علیرغم محبوبیت این زبان، به C انتقادهایی نیز وارد است. برخی معتقدند که سینتکس آن ممکن است برای یادگیری پیچیده باشد. با این وجود، C همچنان یک زبان محبوب و تأثیرگذار است و احتمالاً تا سالها همچنان باقی بماند.
تاریخچه زبان برنامه نویسی C چیست ؟
زبان برنامه نویسی C در اوایل دهه ۱۹۷۰ در آزمایشگاههای Bell و به طور عمده توسط Ken Thompson و Dennis Ritchie ایجاد شد. برنامه نویسان، به منظور توسعه برنامههای کاربردی برای سیستم عامل یونیکس، که در آن زمان به زبان اسمبلی نوشته میشدند، به یک مجموعه دستورالعملهای کاربر پسندتر نیاز داشتند. برنامههای اسمبلی که مستقیماً با سختافزار کامپیوتر ارتباط برقرار میکردند، فرآیند دیباگ طولانی و پیچیدهای داشتند و اضافه کردن عملکرد جدید به آنها نیز، نیازمند زمان و تلاش فراوانی بود.
اولین زبان سطح بالای Ken Thompson زبان B نامگذاری شد، زیرا بر اساس زبان برنامه نویسی سیستمی BCPL ساخته شده بود. Thompson زبان B را بازنویسی کرد تا بهتر با خواستههای زمان مدرن مطابقت داشته باشد، همچنین سختافزار سیستم بهتری در آزمایشگاه Bell، یک مدل سیستم یونیکسی PDP-11 از شرکت تجهیزات دیجیتال خریداری شده بود و در نتیجه زبان C، به عنوان جانشین زبان B، ایجاد شد. تا سال 1973 زبان برنامه نویسی C به حدی پیشرفت کرده بود که بتوان از آن برای بازنویسی سیستم عامل UNIX استفاده کرد.
سایر برنامه نویسان به مستنداتی نیاز داشتند که نحوه استفاده مؤثر از C را پیش از استفاده از آن در خارج از آزمایشگاههای Bell یاد بگیرند. در سال ۱۹۷۸، کتاب «زبان برنامه نویسی C» نوشته Brian Kernighan و Dennis Ritchie، که گاهی اوقات با عنوان K&R یا «کتاب سفید» توسط علاقهمندان به C شناخته میشود، به منبع متعارف برای زبان برنامه نویسی C تبدیل شد. نسخه دوم K&R، که برای اولین بار در سال ۱۹۸۸ منتشر شد، هنوز هم از منظر محتوا، مرجع محسوب میشود. با توجه به این کتاب، اولین نسخه پیشگام C به K&R C معروف شد.
در طول دهه ۸۰ میلادی، توسعهدهندگان C به منظور جلوگیری از توسعه مشتقهای شخص ثالث، به دنبال ایجاد استانداردهایی برای این زبان بودند. موسسه استاندارد ملی آمریکا (ANSI) استاندارد «X3.159-1989» را در سال ۱۹۸۹ به عنوان استاندارد رسمی ایالات متحده برای C صادر کرد. در سال ۱۹۹۰، سازمان بینالمللی استانداردسازی (ISO) استاندارد «ISO/IEC 9899:1990» را صادر کرد. این استانداردها و همچنین بهروزرسانیهای بعدی آنها به عنوان نسخههای C پس از K&R بصورت (C89 ، C90 و C99) نامیده میشوند.
دهه ۱۹۸۰، دهه رشد توسعه سیستم عاملها بود که C و استفاده از آن در یونیکس تنها بخشی از این تلاشها محسوب میشود. علیرغم پیشرفتهای C نسبت به اجداد خود، همچنان زبان C برای ایجاد برنامههای نرمافزاری بزرگتر دشوار بود. همچنین با قدرتمندتر شدن کامپیوترها، تقاضای فزایندهای برای یک محیط برنامه نویسی کاربر پسندتر ایجاد میشود.
این تمایل، برنامه نویسان را به استفاده از C برای ایجاد کامپایلرهای خاص خود و در نتیجه زبانهای برنامه نویسی جدید سوق داد. این زبانهای جدید میتوانند برنامه نویسی عملهای پیچیده را آسانتر کنند. به عنوان مثال، برنامه نویسی شیگرا، روش برنامه نویسی است که توانایی فرد را در استفاده مجدد از کد بیشینه میکند. برای مثال زبانهایی مانند ++C و جاوا که هر دو از C مشتق شدهاند، به طور کامل از شیگرایی پشتیبانی میکنند.
چرا این زبان را C نامیدهاند؟
زبان برنامه نویسی C، نام خود را در یک بازی الفبایی در جانشینی زبان برنامه نویسی B یا Basic بدست آورد، که خود نسخهای از BCPL (زبان برنامه نویسی ترکیبی پایه) با حافظه کارآمدیش بود.
در زبان C سیستم نوع دادهای اضافه شده که به این زبان اجازه میدهد سبکتر و اساسیتر از BCPL باقی بماند. اما همچنین به اندازه کافی پیچیده برای نوشتن برنامههای قدرتمند باشد. ۴ نوع داده اولیه زبان برنامه نویسی C عبارتند از int، char، void و float، اما سیر تکاملی خانواده C به همین جا ختم نمیشود. زبان C به قدری همه کاره است که اغلب آن را مادر همه زبانها مینامند. پس از آن، توسعهدهندگان به ایجاد زبانهای دیگری چون C++ ،PHP ،JavaScript ،Java ،Python و Perl ادامه دادند.
ویژگی های اصلی زبان برنامه نویسی C چیست ؟
زبان برنامه نویسی C زبانی چندمنظوره برای مدیریت سیستم، برنامه نویسی شبکه و توسعه نرمافزار برای سیستمهای تعبیه شده به حساب میآید. این زبان دارای ویژگیهایی است که آن را برای توسعه برنامههای این چنینی مطلوب میکنند. در ادامه به برخی از مهمترین ویژگیهای C پرداخته شده است.
- سینتکس برنامههای توسعه داده شده در C به منظور یادگیری و خواندن آسان است. این امر باعث میشود اشکالزدایی کدها، در دسترستر و سریعتر باشد.
- برنامههای C در مقایسه با بسیاری از زبانها نسبتاً کوتاهتر هستند که این امر باعث کاهش زمان لازم برای توسعه میشود.
- زبان C زبان برنامه نویسی قدرتمندی است که توسعهدهندگان را قادر میسازد سیستمهای نرمافزاری پیشرفته ایجاد کنند.
- این زبان سریع و کارآمد است و از طرفی به سادگی میتوان آن را یاد گرفت. این امر، زبان C را برای بسیاری از برنامهها به انتخابی محبوب تبدیل میکند.
- زبان برنامه نویسی C همچنین زبانی قابل حمل است، به این معنی که برنامههای نوشته شده در C را میتوان به راحتی به سیستم عاملهای دیگر منتقل کرد.
- زبان C با توجه به اینکه برای اولین بار در سال ۱۹۷۹ منتشر شد، قدمت زیادی دارد. بنابراین بسیاری از کتابخانهها و ابزارها برای آن موجود است که استفاده از آن را تسهیل میسازد.
مزایای C نسبت به سایر زبانهای برنامه نویسی چیست ؟
زبان C یک زبان برنامه نویسی قدرتمند است که مزایای بسیاری، نسبت سایر زبانها دارد. در ادامه این بخش فهرستی از برخی مزایای زبان برنامه نویسی C ارائه شده است.
- زبان C زبانی چندمنظوره است که میتوان برای کاربردهای مختلف از آن استفاده کرد.
- زبان برنامه نویسی C زبانی بسیار کارآمد است که میتوان کدهایی را در آن توسعه داد که سریع و قابل اعتماد باشند.
- C زبانی قابل حمل است، به این معنی که کدی را که در زبان C توسعه داده شده است، میتوان به راحتی کامپایل و بر روی سیستم عاملهای مختلف اجرا کرد.
- زبان برنامه نویسی C زبانی کاملاً جاافتاده با جامعه کاربری بزرگ و فعال از توسعهدهندگان به حساب میآید که به طور مداوم در حال بهبود و ایجاد ابزارها و کتابخانههای جدید برای آن هستند.
استفاده از زبان برنامه نویسی C و کاربردهای کلیدی آن
زبان برنامه نویسی C یکی از قدیمیترین و اساسیترین زبانهای برنامه نویسی محسوب میشود و در سراسر جهان به طور گسترده مورد استفاده قرار میگیرد. C زبانی سریع و قابل حمل، با کتابخانههای گسترده است. این زبان، زبانی سطح میانی به حساب میآید که هم مزایای زبان سطح پایین و هم قابلیتهای زبانهای سطح بالا را دارا است.
اگر بدانید که به مرور از محبوبیت زبان C کاسته میشود، ممکن است ناامید شوید. با این حال، این زبان یک اثر قابلتوجه در هر زمینه به جای گذاشته و به طور گسترده برای توسعه برنامههای کاربردی و سیستمی استفاده میشود. برخی از برنامههای کاربردی که به زبان برنامه نویسی C نوشته میشوند چیست ؟ در ادامه این بخش در زیربخشهای جداگانه به هر یک از کاربردهای زبان برنامه نویسی C پرداخته شده است.
سیستم عامل ها
زبان برنامه نویسی C با قصد توسعه سیستم عامل UNIX ایجاد شد. علاوه بر این، سرعت اجرای برنامههایی که در C توسعه داده شدهاند در حد سرعت اجرای برنامههای توسعه دادهشده در زبان اسمبلی است. زبان برنامه نویسی C ، مهمترین زبان در توسعه سیستم عاملهای مختلف به حساب میآید. از آن برای توسعه کرنل یونیکس، برنامههای کاربردی مایکروسافت ویندوز، سیستم عاملهای متعدد و بخش اعظمی از سیستم عامل اندروید استفاده شده است.
سیستم های تعبیه شده
برای ارتباط مستقیم با سختافزار ماشین، برنامه نویسی C اغلب به عنوان بهترین انتخاب برای برنامههای کدنویسی و درایورهای سیستمهای تعبیه شده و موارد دیگر در نظر گرفته میشود. زبان برنامه نویسی C زبان پیشنهادی برای ایجاد درایورها و برنامههای سیستمهای تعبیه شده است زیرا در دسترس بودن APIهای سختافزاری سطح ماشین و همچنین وجود کامپایلرهای C، تخصیص حافظه پویا و مصرف منابع مشخص، این زبان را به محبوبترین زبان برای سیستمهای تعبیه شده تبدیل میکند.
فیلم های سه بعدی
برنامههای توسعه دادهشده در C و ++C معمولاً برای ساخت فیلمهای سه بعدی استفاده میشوند، زیرا آنها حجم قابل توجهی از پردازش دادهها و محاسبات را در عرض چند ثانیه انجام میدهند، این برنامهها باید بسیار کارآمد و سریع باشند. هرچه طراحان و انیماتورها زمان کمتری برای ایجاد عکسها و فیلمها صرف کنند، هزینه بیشتری صرفهجویی خواهد شد.
کاربرد زبان C در بازی و انیمیشن
از آنجا که زبان برنامه نویسی C مبتنی بر کامپایلر است و تاکنون سریعتر از پایتون یا جاوا بوده، در صنعت بازی محبوبیت زیادی پیدا کرده است. برخی از ابتداییترین بازیها مانند بازی Dino ،Tic-Tac-Toe و بازی مار به زبان برنامه نویسی C نوشته شدهاند. علاوه بر این، Doom3، یک بازی ترسناک تیرانداز اول شخص که توسط نرم افزار ID در سال ۲۰۰۴ برای مایکروسافت ویندوز ساخته شد با استفاده از زبان برنامه نویسی C نوشته شده و یکی از قدرتمندترین بازیهای گرافیکی بوده که تاکنون ساخته شده است.
زبان سطح متوسط
با تعبیه سایر زبانها، گاهی اوقات C به عنوان زبان واسطه استفاده میشود. این روش میتواند برای قابلیت حمل یا راحتی مورد استفاده قرار گیرد. زیرا با استفاده از زبان C به عنوان زبان واسطه، به خصوص نیاز به مولدهای کد مبتنی بر سختافزار رفع خواهد شد. زبان برنامه نویسی C شامل ویژگیهای خاصی مانند دستورالعملهای پیشپردازش خطوط کد و سایر موارد است که به کامپایل کدهای تولی شده کمک میکند. برخی از نقصهای زبان C موجب ایجاد زبانهای جدید مبتنی بر C شده است که از C به عنوان زبان میانی بهره میبرند.
ایفای نقش مهم C در توسعه زبان برنامه نویسی جدید
برنامه توسعه داده شده در C آسان و سریع است. در نتیجه، منجر به ایجاد بسیاری از زبانهای دیگر شده است. زبان برنامه نویسی ++C (که به عنوان زبانی شبیه به C با قابلیت پشتیبانی از مفهوم کلاس در برنامه نویسی و شیگرایی نیز شناخته میشود)، C# پایتون، جاوا، JavaScript ،Perl ،PHP ،Verilog ،D ،Limbo و شل Unix C نمونههایی از این زبانها هستند. هر زبانی از زبان برنامه نویسی C تا سطوح مختلف استفاده میکند. به عنوان مثال، پایتون از C برای تهیه کتابخانههای استاندارد استفاده میکند در حالی که C++ ،PHP و پرل برای سینتکس و معماری کنترل خود نیز به C نیاز دارند. زبان برنامه نویسی C ، امکان توسعه برنامههای کاربردی سریعتر را در کامپیوتر فراهم میکند.
نقش C در ساخت رابط کاربری گرافیکی
زبان برنامه نویسی C در نرم افزارهای مرتبط با «رابط کاربری گرافیکی» (Graphical User Interface | GUI) نیز کاربرد دارد. از ابتدا ادوبی فوتوشاپ، یکی از ویرایشگرهای بسیار پرکاربرد محتوای تصویری بود. این ابزار کاملاً به کمک زبان برنامه نویسی C ایجاد شده است. علاوه بر این، C برای توسعه «ادوبی ایلاستریتور» (Adobe Illustrator) و «ادوبی پریمیر» (Adobe Premiere) نیز استفاده شده است.
کاربرد زبان برنامه نویسی C در گوگل
از زبانهای برنامه نویسی C و ++C برای ایجاد مرورگر وب گوگل کروم و سیستم فایل گوگل استفاده شده است. علاوه بر این، جامعه اپن سورس گوگل شامل پروژههای بسیاری میشود که با زبان برنامه نویسی C و ++C توسعه داده شدهاند.
کاربرد C در موزیلا تاندربرد و فایرفاکس
از آنجا که موزیلا «تاندربرد» (Thunderbird) و فایرفاکس کلاینتهای آزاد و اپن سورس بودند، آنها در فهرست کاربردهای C قرار میگیرند. این برنامهها با زبان برنامه نویسی C و ++C توسعه داده شدهاند.
کاربرد C در طراحی کامپایلر
میتوان به طور گسترده از زبان برنامه نویسی C برای توسعه کامپایلرها به عنوان یکی از مهمترین کاربردهای آن استفاده کرد. بسیاری از کامپایلرهای زبانهای دیگر با استفاده از زبان برنامه نویسی C ایجاد شدهاند و این امر، درک کد را برای دستگاه آسانتر میکند. بسیاری از کامپایلرهای شناخته شده مانند Clang C ،Bloodshed Dev-C ،Apple C و Mingw با زبان برنامه نویسی C تهیه شدهاند.
کاربرد زبان C در پایگاه داده MySQL
MySQL یکی دیگر از پروژههای اپن سورس است که در «سیستمهای مدیریت پایگاه داده رابطهای» (RDBMS) استفاده میشود. این ابزار با زبان برنامه نویسی C و ++C توسعه داده شده است.
مترجم زبانهای سطح بالا به زبان ماشین
مفسرها برنامههای کامپیوتری هستند که برای ترجمه زبانهای سطح بالا به زبان ماشین استفاده میشوند. میتوان مفسرهای سایر زبانها را به زبان برنامه نویسی C نوشت. چندین مفسر زبان کامپیوتری، مانند مفسر پایتون، مفسر متلب و سایر موارد، در زبان برنامه نویسی C توسعه داده شدهاند.
اجزای کد ها در برنامه نویسی C چیست ؟
نوشتن برنامهای به زبان برنامه نویسی C چگونه انجام میشود؟ برای نوشتن برنامه نیاز است ترتیبی از عبارتها را در کدهای خود رعایت کنیم. حواسمان به این مسئله باشد که وقتی کدی را در IDE مینویسیم، برای اجرای آن، کامپایلر خط به خط کدها را میخواند و به زبان ماشین ترجمه میکند، به همین دلیل نیاز است حتماً عبارتها را به ترتیب بنویسیم.
۱. گنجاندن فایل های سرآیند Header
در خط اول برنامه، عبارت [#include <stdio.h>] نوشته میشود. این اولین و مهمترین جزء گنجاندن فایلهای Header در یک برنامه C به حساب میآید. فایل هدر فایلی با پسوند .h است که شامل اعلانهای تابع C و تعاریف ماکروها (مجموعهای از جملهها و دستورالعملها) میشود که باید بین چندین فایل منبع به اشتراک گذاشته شوند. تمام خطوطی که با # شروع میشوند توسط پیشپردازنده پردازش میشوند. پیشپردازنده برنامهای است که توسط کامپایلر فراخوانی میشود. پیشپردازنده کدهای پیشپردازش شدهstdio.h را در فایل مربوطه کپی میکند. فایلهای.hدر زبان C فایلهای Header نامیده میشود. برخی از فایلهای هدر C در ادامه نام برده شدهاند.
- stddef.h: چندین نوع از ماکروهای قابل استفاده را تعریف میکند.
- stdint.h: تعریف کننده طول دقیق انواع عدد صحیح است.
- stdio.h: توابع ورودی و خروجی اصلی را تعریف میکند.
- stdlib.h: تعریف کننده توابع تبدیل عددی ، تبدیل کننده شبکه شبه تصادفی و تخصیص حافظه است.
- string.h: توابع مدیریت رشته را تعریف میکند.
- math.h: تعریف کننده توابع ریاضیاتی متداول است.
۲. تعریف متد اصلی main در زبان C
خط دوم[int main()] را مینویسیم. قسمت بعدی برنامه C، اعلان تابعmain() است. این نقطه ورودی برنامه C به حساب میآید و اجرا معمولاً با خط اولmain() شروع میشود. براکتهای خالی نشان میدهد که تابع اصلی هیچ پارامتر ورودی را نمیگیرد.int که قبل از main نوشته شده، نشان دهنده نوع خروجی main() است. مقدار بازگشتی توسطmain() نشان دهنده وضعیت پایان برنامه و خروجی کل کدها است.
۳. بدنه متد اصلی main
بدنه تابع اصلی در برنامه C به عباراتی اشاره دارد که بخشی از آن تابع هستند. این گزارهها میتوانند هر چیزی مانند دستکاری، جستجو، مرتبسازی، چاپ و غیره باشد. یک جفت آکولاد، بدنه تابع را مشخص میکند. همه توابع باید با آکولاد باز شروع و به آکولاد بسته ختم شوند.
۴. عبارت دستوری در زبان C چیست ؟
عبارات دستوری دستورالعملهایی هستند که به کامپایلر ارائه میشوند. در زبان C، یک دستور همیشه با نقطه ویرگول (;) خاتمه مییابد. در این مورد خاص، ما از تابع printf()برای دستور دادن به کامپایلر برای نمایش متن Hello World روی صفحه استفاده میکنیم.
۵. عبارت بازگشتی
آخرین قسمت هر تابع C عبارت return است. این عبارت به مقادیر بازگشتی از یک تابع اشاره دارد. این عبارت بازگشتی و مقدار بازگشتی به نوع بازگشت تابع بستگی دارد. دستور return در برنامه ما مقدار را از main()برمیگرداند. مقدار برگشتی ممکن است توسط سیستم عامل برای اطلاع از وضعیت پایان برنامه استفاده شود. مقدار 0 معمولاً به معنای پایان موفقیت آمیز است.
دستورات پایه زبان برنامه نویسی C
دستورات اولیه زبان برنامه نویسی C چیست ؟ در ادامه به معرفی آنها پرداخته شده است.
- include# : این تابع اصلی پیشپردازنده فایل هدر است که فایلهای هدر ورودی و خروجی استاندارد را از مخزن C، مانند stdio.h قبل از کامپایل کردن برنامه پیشپردازش میکند.
- ()int main : این عبارت C، مانند اکثر زبانهای برنامه نویسی، تابع اصلی است، که نقطه شروع اجرای برنامه به حساب میآید. هنگاهی که main()اصلی اجرا شد، تمام متُدها و توابع دیگر نیز اجرا میشوند.
- } : آکولاد نوعی براکت است که در هر زبان کامپیوتری نه فقط زبان C مورد استفاده قرار میگیرد. این نشاندهنده شروع تعریف متد یا تابع است.
- /* توضیح کد */ : متن داخل تگهای /* و */ به عنوان کامنت در نظر گرفته میشود و اجرا یا کامپایل نمیشود. این مسئله به منظور ارائه کدنویسی با دانش واضح از کد و کاربرد یا استفاده از آن است.
- Printf : خروجی با استفاده از این دستور C روی صفحه کنسول چاپ میشود.
- ()Getch : این تابع به منظور منتظر ماندن برای ورودی کاربر استفاده میشود.
- return 0 : این تابع زبان C پس از پایان برنامه C یا تابع main()، عدد0را برمیگرداند.
- { : بلوک تابع یا متد با این آکولاد بسته میشود.
- // : برای نوشتن نظرات کوتاه و تک خطی از این علامت استفاده میکنیم، این علامت در زبانهای دیگر نیز به همین عنوان استفاده میشود.
- return : خروجی اجرای کدها با استفاده از این تابع برگردانده میشود.
- d% : این علامت مشخص کننده قالب کاراکتر نوع صحیح است. برای این استفاده میشود که خروجی خوب به نظر برسد.
- Scanf : دادههای کاربر از پنجره ترمینال معمول کنسول با استفاده از این تابع C گرفته میشود.
حال با استفاده از عملگرهای معرفی شده، سادهترین برنامه را با کدهای زبان برنامه نویسی C مینویسیم تا عبارت «Hello World» را چاپ کند.
1#include <stdio.h>
2
3int main (void)
4
5{
6
7 printf("n Hello World n");
8
9 return 0;
10
11}
به عنوان توضیح کدهای فوق، همانطور که به وضوح مشاهده میشود، برنامه با # شروع شده است. هر خط در زبان برنامه نویسی C که با یک # شروع شود، در ابتدای اجرای برنامه، توسط پیشپردازنده به آن رسیدگی میشود. نخستین چیزی که در هنگام کامپایل این برنامه اتفاق میافتد، این است که خط شروعشده با #، با هر آنچه در فایل هدر stdio.h است، جایگزین میشود.
در ادامه، خط «int main (void)» است. این خط، شروع تابعی به نام main محسوب میشود که مقدار عدد صحیح (int) را برمیگرداند و هیچ آرگومان void نیز نمیگیرد. ذکر این نکته حائز اهمیت است که هر برنامه C را که در آینده میبینیم، شامل یک یا چند تابع است. تابع «main» جایی است که اجرای برنامه، پس از اجرای آن آغاز میشود. در حالی که تمام توابع دیگر از درون تابع main یا توابع دیگری خوانده میشوند و به ما امکان میدهند ترتیب فراخوانی توابع را بسته به نیازهای خود تغییر دهیم، که ابتدا توسط main()فراخوانده شدهاند.
پس از آن، یک آکولاد باز ( } ) وجود دارد. این در اصل ابتدای دامنه یک تابع را تعیین میکند. در پایان نیز، آکولاد بسته ( } ) قرار گرفته که نشان دهنده پایان دامنه تابع main() است. به تمام دستورالعملهای موجود بین این براکتها به عنوان بخشی از بدنه تابع رسیدگی خواهد شد.
در بدنه تابع main، دو خط کد وجود دارد، یکی از آنها «;printf("n Hello World n")» بوده که دستور printf تابعی در کتابخانه سیستمی است که رشتههای متنی به قالب مشخص را به «STDOUT» (خروجی سیستم) ارسال میکند. این تابع هر چیزی را چاپ میکند که هر کس بین علامتهای نقلقول ("") قرار دهد.
به جز «توالی گریز» (Escape Sequences) که چیزهایی مانند "n"، که به یک خط جدید تبدیل میشود را شامل میشود. خط دوم بدنه کد «Return 0» است. در اصل انتهای تابع main را نشان میدهد و مقدار «0» را برای تابع main، باز میگرداند. در نهایت، ما انتظار داریم که این کد در خروجی «Hello World» را چاپ کند.
دنیای امروز چگونه از زبان C بهره میبرد؟
در دنیای امروز، تقریباً همه چیز توسط کامپیوترها تأمین میشود. کامپیوترها با زندگی ما در هم تنیدهاند، از کوچکترین دستگاههای الکترونیکی گرفته تا بزرگترین ابَر کامپیوترها، همگی زندگی ما را تحت تاثیر قرار دادهاند. در حالی که انواع مختلفی از سیستمهای کامپیوتری وجود دارد، اما همه آنها یک نقطه مشترک دارند؛ اینکه آنها مبتنی بر زبان برنامه نویسی C هستند.
زبان C زبانی همهکاره به حساب میآید که میتواند انواع مختلف برنامهها را ایجاد کند. از این زبان در توسعه سیستم عامل برای بسیاری از کامپیوترهای جهان و همچنین نرم افزارهایی استفاده میشود که روی آن سیستم عاملها کار میکنند. علاوه بر آن، برای ایجاد وبسایتها و برنامههایی که روزانه از آنها استفاده میکنیم نیز از زبان C استفاده میشود.
اما زبان برنامه نویسی C تنها در کامپیوترها کاربرد ندارد، بلکه برای کنترل دستگاههایی که در زندگی روزمره خود استفاده میکنیم، از تلفنهای همراه گرفته تا مایکروویو نیز استفاده میشود. تخمین زده میشود که بیش از ۹۰ درصد از دستگاههای الکترونیکی جهان از C استفاده میکنند. بنابراین& دفعه بعد که از سیستم کامپیوتری خود استفاده میکنید یا حتی فقط سوئیچ ماشین را میچرخانید، به یاد داشته باشید که از زبان C در زندگی روزمره خود استفاده کردهاید.
چرا باید زبان برنامه نویسی C را یاد بگیریم ؟
تعداد زیادی از انواع زبانهای برنامه نویسی برای انتخاب وجود دارد، از سطح فوقالعاده پایین مانند ویژوال بیسیک تا سطح بالا که طیف گستردهای از امکانات تخصصی دارند و مانند زبانهای Perl، روبی و پایتون انتخابهای خوبی برای پیادهسازی بسیاری از وظایف به حساب میآیند. جاوا همچنین به زبان برنامه نویسی محبوبی به منظور انجام کارهای خاص تبدیل شده است که بخشی به دلیل API گسترده آن و بخشی به دلیل ویژگیهای امنیتی ماشین مجازی است.
با این وجود، دلایل قانع کنندهای برای تسلط بر برنامه نویسی C وجود دارند. اول اینکه زبان C به مدت ۳۰ سال است توسط برنامهنویسان مورد استفاده قرار میگیرد و کدهای منبع بسیاری زیادی برای آن وجود دارد. این بدان معنا است که موارد زیادی برای یادگیری آن و پیادهسازی عملکردهای مختلف با استفاده از آن وجود دارند. علاوه بر این، بسیاری از مشکلات این زبان مشخص و در بین برنامهنویسان به خوبی درک شدهاند و آموزشهای متعددی نیز برای آن در دسترس است.
زبان برنامه نویسی C به دلیل قدمت زیاد و بکارگیری آن به عنوان زبان برنامه نویسی سیستم برای یونیکس به چیزی شبیه به یک زبان برنامه نویسی جهانی تبدیل شده است. C زبان فوقالعادهای برای توصیف مفاهیم برنامه نویسی رایج به شکلی است که اکثر مردم میتوانند آنها را درک کنند. علاوه بر این، بسیاری از اصول مورد استفاده در C مانند argc و argv برای پارامترهای خط فرمان، ساختارهای حلقه و انواع متغیرها، در بسیاری از زبانهای دیگری که یاد میگیریم ظاهر میشوند و به ما امکان میدهند با دیگران حتی اگر C را ندانند ارتباط برقرار کنیم، به نحوی که برای هر دو قابل درک باشد.
زبان برنامه نویسی C دارای ۳۲ کلمه کلیدی، انواع دادهها و مجموعهای از عملکردهای سیستمی است که برنامه نویسی را آسانتر میکند. یکی دیگر از ویژگیهای برنامه نویسی زبان C توانایی آن در بسط دادن خودش است. توابع مختلف از یک کتابخانه در برنامه C گنجانده شدهاند. ما امکان اضافه کردن ویژگیها و عملکردهای خود را به کتابخانهها داریم. در برنامه ما هر زمان که بخواهیم میتوانیم به این توابع دسترسی داشته باشیم و از آنها استفاده کنیم. این قابلیت کار با کدهای پیچیده را بسیار سادهتر میکند. تعدادی کامپایلر در بازار وجود دارد که ممکن است برای اجرای برنامههای نوشته شده به این زبان استفاده شوند.
زبان برنامه نویسی C چگونه کار می کند ؟
زبان C زبانی کامپایل شده، یعنی بدان معنی است که باید فایلهای منبع خود (یعنی فایلهای متنی قابل خواندن توسط انسان) را به فایلهای شی (فایلهای متنی قابل خواندن ماشین برای میکروکنترلرها، کامپیوترها و لپ تاپها) تبدیل کند.
ویرایش کد منبع
نوشتن یا ویرایش کد منبع مرحله اولیه در ساخت یک برنامه کاربردی با زبان C است. کد منبع فایل متنی است که شامل تمام دستورالعملهایی میشود که باید توسط ماشین (قابل درک برای انسانها) اجرا شود. میتوان از کد ادیتور ساده مانند Notepad یا ویرایشگر داخلی IDE استفاده کرد. یکی از بهترین ویرایشگرهایی که میتوان از آن برای برنامه نویسی C استفاده کرد، ویژوال استدیو است که از طریق لینک [+] میتوان آن را دانلود کرد.
کد منبع باید از سینتکس زبان برنامه نویسی C پیروی کند. پس از تکمیل فایل منبع، آن را به عنوان فایل c.* ذخیره میکنیم. ما به یک کامپایلر برای کامپایل کردن کد منبع خود نیاز داریم. اگر از ویرایشگر متن سادهای برای کد منبع خود استفاده کنیم، باید یکی از کامپایلرهای C را روی کامپیوتر شخصی خود نصب و آن را به صورت دستی از خط فرمان اجرا کنیم. یک روش سادهتر این است که از IDE (که باید کامپایلر داشته باشد) استفاده کنیم و به سادگی دکمه منو را فشار داده تا کامپایل آغاز شود.
مرحله پردازش اولیه فایل منبع در کار کامپایل گنجانده شده است. یک پیشپردازنده توسط کامپایلر برای انجام پیش پردازش فراخوانی میشود. پیشپردازنده کد منبع را برای خطوطی جستجو میکند که با کاراکتر # (هش) شروع میشوند.
توابع شناسایی شده به صورت خارجی از کد منبع ما یکی از دستورالعملهای کامپایلر را شامل میشود. پیشپردازنده تمام دستورالعملهای کامپایلر را از کد اصلی حذف میکند، اما پیگیری میکند که کدام فایلهای اضافی در مراحل بعدی مورد نیاز هستند. یک فایل موقت در پایان پیشپردازش ایجاد میشود که از دید کاربر پنهان است.
پس از اتمام کامپایل آمادهسازی شروع میشود. فایل منبع ما توسط کامپایلر به یک فایل شی خواهد شد. فایل شی، همچنین به عنوان کد ماشین شناخته میشود و توسط واحد پردازش مرکزی کامپیوتر ( CPU) یا میکروکنترلر تفسیر خواهد شد.
فایل شی کامل است، با این حال برخی از مراجع تعریف نشده گم میشوند. این مراجع تعریف نشده قطعات کدی هستند که باید از یک مکان جداگانه واکشی شوند. تابع ()printf مرجع تعریف نشده در سناریوی ما است. میدانیم که کد این تابع را از کجا بدست آوریم زیرا دستورالعمل کامپایلر #includestdio.h> آن را ذکر کرده است.
stdio.h یک فایل هدر ( h.*پسوند) است که شامل اعلان تابع ()printf ما و موارد دیگر میشود. توضیح میدهیم که از کجا میتوان تعریف تابع ()printf را با گنجاندن فایل هدر دریافت کرد.
اتصال در زبان C
در این مرحله، باید تمام فایلهای مورد نیاز برنامه خود را جمع آوری کنیم. برای توابع خارجی، به فایلهای آبجکت و همچنین فایلهای کتابخانه استاتیک نیاز داریم. توابع خارجی مورد استفاده در فایل منبع ما در فایلهای کتابخانه استاتیک (lib.*) تعریف شدهاند. کد ماشین برای تابع ()printf در فایل کتابخانه استاتیک در سناریوی ما ذخیره میشود.
پیوند دهنده کسی است که پیوند را انجام میدهد. تمام فایلهای آبجکت را برای مراجع تعریف نشده بررسی میکند و آنها را با کد ماشین از فایلهای کتابخانه جایگزین میکند. یک فایل اجرایی (exe.* برای برنامههای کاربردی ویندوز و hex.* برای میکروکنترلرها) در پایان مراحل اتصالات خواهیم داشت.
بارگذاری
سپس فایل برنامه باید قبل از اجرا در حافظه کامپیوتر بارگذاری شود. یک «بارگذار» (Loader) این کار را بر عهده دارد. لودر معمولاً توسط پیوند دهنده در فایل اجرایی قرار میگیرد. وقتی فایل اجرایی را اجرا میکنیم، لودر را فعال میکند که برنامه را در حافظه بارگذاری و عملیات را شروع کند.
زبان برنامه نویسی C و ++C چه تفاوتی دارند ؟
در حالی که زبانهای برنامه نویسی C و ++C به نظر شبیه میرسند، ولی همچنان این پرسش مطرح میشود کاربرد و ویژگیهای هر دو زبان سیپلاسپلاس و زبان برنامه نویسی C چیست ؟ جواب بدین گونه است که این ویژگیها تا حدی با یکدیگر متفاوت هستند. زبان C پلاس پلاس مجموعهای عظیم و جانشین زبان C محسوب میشود که از مجموعهای کاملا متفاوت از مفاهیم برنامه نویسی استفاده میکند. زبان برنامه نویسی C زبانی رویهای است در حالی که ++C از مفاهیم «شی گرایی» (OOP) پشتیبانی میکند. در ادامه به تفاوتهای این دو زبان بیشتر اشاره میکنیم.
- زبان C یک زبان رویهای و عملکردی است که هیچ پشتیبانی از اشیا و کلاسها نمیکند. اما زبان برنامه نویسی ++C ترکیبی از شی گرایی و زبان برنامه نویسی عملکردی است.
- زبان برنامه نویسی C دارای ۳۲ کلمه کلیدی و زبان ++C دارای ۶۳ دستور اصلی میباشد.
- زبان C از انواع دادههای داخلی پشتیبانی میکند در حالی که ++C علاوه بر انواع دادههای داخلی، از دادههای تعریف شده توسط کاربر نیز پشتیبانی میکند.
- زبان برنامه نویسی C «اصلاح کنندههای دسترسی» (Access Modifiers) ندارد، در حالی که زبان ++C دارای این ویژگی میباشد.
- زبان C از فایل هدر <stdio.h> برای عملیات ورودی و خروجی استفاده میکند، اما زبان ++C فایل هدر <iostream.h> را برای عملیات ورودی و خروجی خود نیاز دارد.
- زبان برنامه نویسی C نمیتواند دادهها را پنهان کند در حالیکه ++C امن است و رمزگذاری را فراهم میکند.
- در زبان C هیچ پشتیبانی از Exception Handling نمیشود ولی ++C از آن پشتیبانی میکند.
- زبان برنامه نویسی C از تابع و «سربار گذاری عملگرها» (Operator Overloading) پشتیبانی نمیکند در حالیکه این مسئله در مورد زبان ++C صدق نمیکند و در این زبان پشتیبانی از این عملیات صورت میگیرد.
- در زبان C فراخوانی تابع ()main از طریق سایر توابع استفاده شده در کد انجام میشود، اما ++C این قابلیت را ارائه نمیدهد.
- متغیرهای مرجع توسط C پشتیبانی نمیشوند اما زبان ++C آنها را پشتیبانی میکند.
آینده زبان برنامه نویسی C چگونه است؟
بدون شک زبان برنامه نویسی C همچنان باقی میماند، همانطور که چندین دهه است وجود دارد و هنوز هم به طور گسترده در برنامههای مختلف استفاده میشود. در حالی که زبانهای دیگر آمدهاند و رفتهاند، زبان C هنوز هم به عنوان انتخابی محبوب برای بسیاری از توسعهدهندگان باقی مانده است.
یکی از دلایل محبوبیت مداوم زبان برنامه نویسی C تطبیقپذیری آن است و میتوان از آن برای طیف گستردهای از وظایف، از برنامه نویسی سیستمی در سطح پایین گرفته تا توسعه برنامههای کاربردی در سطح بالا استفاده کرد. زبان C زبانی نسبتاً آسان برای یادگیری به حساب میآد که آن را به انتخاب خوبی برای مبتدیان تبدیل میکند.
علیرغم محبوبیت آن، هیچ تضمینی وجود ندارد که C برای همیشه وجود داشته باشد. زبانها میآیند و میروند و فناوریهای جدید همیشه این پتانسیل را دارند که جایگزین زبانهای موجود شوند. با این حال، زبان C احتمالاً برای سالهای زیادی به عنوان زبانی محبوب باقی خواهد ماند.
مسیر شغلی برنامه نویسی C به چه صورت است؟
زبان برنامه نویسی C، زبانی همهکاره محسوب میشود که برای توسعه برنامههای مختلف مورد استفاده قرار میگیرد. در نتیجه، نمیتوان مسیر شغلی خاصی را برای برنامهنویسان زبان C در نظر گرفت.
- با این حال، بخش عمدهای از مشاغل مرتبط با زبان برنامه نویسی C، شامل مهندسی نرمافزار هستند، زیرا برنامه نویسی C اغلب برای توسعه نرمافزارهای سیستمی، برنامهها و درایورها استفاده میشود.
- همچنین زبان برنامه نویسی C میتواند برای توسعه سیستمهای تعبیه شده و سیستم عاملها استفاده شود.
بنابراین، مشاغل مرتبط با زبان برنامه نویسی C، میتوانند در صنایع مختلف، از توسعه نرم افزار تا مهندسی سختافزار یافت شوند. لذا، با داشتن مهارت و تجربه، شما نمیتوانید حد و مرزی را برای آنچه به آن خواهید رسید متصور شوید.
چگونه زبان برنامه نویسی C را یاد بگیریم ؟
اگر میخواهید برنامه نویسی C را یاد بگیرید، چند مورد وجود دارد که باید آنها در نظر داشته باشید.
- ابتدا، پیدا کردن منبع خوبی برای یادگیری اصول اولیه زبان برنامه نویسی C ضروری است. پس از کسب پایه آموزشی قوی، میتوان با نوشتن برنامههای کوچک، شروع به تمرین کرد.
- شرکت در اجتماعات آنلاین یا جوامع کاربری اختصاص داده شده به برنامه نویسی C نیز مفید است، زیرا میتوان از دیگران که با این زبان کار میکنند، چیزهای بیشتری آموخت.
- در نهایت، هنگام برخورد با مشکلی، از درخواستِ کمک نترسید. افراد بسیاری به مبتدیان کمک میکنند تا برنامه نویسی C را یاد بگیرند.
چرا زبان برنامه نویسی C هنوز محبوب است ؟
در ادامه مطلب زبان برنامه نویسی C چیست به این مسئله میپردازیم که وضعیت این زبان امروزه به چه شکل است. امروزه زبانهای برنامه نویسی بسیاری وجود دارند که به توسعهدهندگان اجازه میدهد تا در انواع مختلف پروژهها به زبان C ثمر بخشتر باشند. زبانهای سطح بالاتری وجود دارند که کتابخانههای از پیش تعبیه شده بسیار بزرگی را ارائه میدهند که کار با JSON ،XML ،UI، صفحات وب، رابط گرافیکی، درخواستهای کاربر، اتصالات پایگاه داده و بانکهای اطلاعاتی، ارتباطات، دستکاری محتوای تصویری و سایر موارد را سادهتر میکنند.
اما با وجود این، دلایل زیادی وجود دارد که باور داشته باشید برنامه نویسی C برای مدتهای طولانی باقی خواهد ماند. در زبانهای برنامه نویسی، چیزی تحت عنوان همهفنحریف وجود ندارد. در ادامه دلایلی ذکر میشوند که نشان میدهد، زبان C برای کاربردهای خاص شکستناپذیر و حتی اجباری است. صرف نظر از اینها، دلایل زیادی برای پیشبینی این امر وجود دارد که زبان برنامه نویسی C برای مدتهای طولانی محبوب خواهد ماند. در ادامه هر یک از این دلایل در زیربخشهایی به طور جداگانه شرح داده شدهاند.
دستکاری حافظه
توانایی زبان C در دسترسی به آدرسهای حافظه دلخواه و انجام عملهای مبتنی بر «اشارهگرها» (Pointer) ویژگی اصلی است که آن را برای برنامه نویسی سیستمی (سیستم عاملها و سیستمهای تعبیه شده) به گزینهای ایدهآل تبدیل میکند. سیستمهای کامپیوتری و میکروکنترلرها، تجهیزات جانبی و پینهای ورودی/خروجی خود را به محلهایی از حافظه در مرز میان سختافزار/ نرمافزار نگاشت میکنند. برای برقراری ارتباط با دنیای خارج، برنامههای کاربردی سیستم باید محلهای خاصی از حافظه را بخوانند و بنویسند. در نتیجه، توانایی زبان C برای دستکاری محلهای مستقل حافظه برای برنامه نویسی سیستمی بسیار حائز اهمیت است.
استفاده از منابع مناسب
در زبان برنامه نویسی C مبحث «بازیافت حافظه» (Garbage Collection) یا حتی تخصیص حافظه پویا مطرح میشود. این مفهوم ویژگی مشترکی در بسیاری از زبانها است که برنامههای سیستمی چندان نمیتوانند به آن متکی باشند. سیستمهای تعبیه شده مقدار معینی از زمان و حافظه دارند. آنها اغلب در سیستمهای بلادرنگ مورد استفاده قرار میگیرند که در آن، یک بازیافتکننده حافظه نامعین نمیتواند گزینه مناسبی باشد. اگر تخصیص پویای حافظه به دلیل کمبود حافظه امکانپذیر نباشد، داشتن ساز و کارهای مدیریت حافظه مانند امکان قرار دادن دادهها در آدرسهای سفارشی با استفاده از اشارهگرهای C بسیار مهم خواهد بود. زبانهایی که به تخصیص پویا و بازیافت حافظه متکی باشند، برای محیطهایی با منابع محدود نامناسب خواهند بود.
قابلیت حمل و کارایی
زبان برنامه نویسی C را تقریباً میتوان نسخهای قابل حمل از زبان اسمبلی دانست. زبان C به طور یکپارچه برای تمام معماریهای رایج پردازنده در دسترس و تا حد امکان به زبان دستگاه نزدیک است. حداقل یک کامپایلر C برای هر معماری موجود دارد و امروزه، به دلیل باینریهای بسیار بهینه ایجاد شده توسط کامپایلرهای مدرن، بهبود عملکرد آنها با دستکاری کد اسمبلی به صورت دستی کار سادهای نخواهد بود.
به دلیل قابلیت حمل و کارآیی آن است که کامپایلرها، کتابخانهها و مفسرهای سایر زبانهای برنامه نویسی اغلب در زبان C پیادهسازی میشوند. پیادهسازیهای اولیه زبانهای مفسری مانند پایتون، روبی و PHP در C توسعه داده شدهاند. زبان C، حتی توسط کامپایلرهای سایر زبانها برای برقراری ارتباط با سختافزار نیز استفاده میشود. به عنوان مثال، C زبان واسطه است که زیربنای Eiffel و Forth را تشکیل میدهد. این بدان معنی است که، به جای تولید کدهای دستگاه برای پشتیبانی از هر معماری، کامپایلرهایی برای آن زبانها که کد C واسطه را تولید میکنند و کامپایلر C که کنترل تولید کد دستگاه را برعهده خواهد داشت.
زبان C همچنین برای برقراری ارتباط بین توسعهدهندگان به یک زبان میانجی تبدیل شده است. همانطور که Alex Allain، مدیر مهندسی Drop box و خالق Cprogramming.com، آن را بیان میکند:
زبان برنامه نویسی C یک زبان عالی برای بیان ایدههای مشترک در برنامه نویسی به نحوی است که بیشتر افراد با آن راحت باشند. علاوه بر این، بسیاری از اصول مورد استفاده در C، به عنوان مثال argc و argv برای پارامترهای خط فرمان، همچنین ساختارهای حلقه و انواع متغیرها مورد استفاده قرار میگیرند، در بسیاری از زبانهای دیگر نیز وجود دارد و در نتیجه میتوان با افرادی که حتی C را بلد نیستند، به نحوی که برای هر دوی شما مشترک است، ارتباط برقرار کنید.
اندازه کد
زبان برنامه نویسی C زمان اجرا بسیار کمی دارد. و ردپای حافظه برای کد آن کمتر از بسیاری از زبانهای دیگر است. برای مثال، وقتی با C پلاس پلاس مقایسه میکنیم، یک باینری تولید شده با C که به دستگاه جاسازی شده منتقل میشود، تقریباً نصف اندازه یک باینری است که توسط کد C پلاس پلاس مشابه تولید میشود. یکی از دلایل اصلی آن پشتیبانی از استثناها است. استثناها ابزار بسیار خوبی هستند که بعداز C به ++C اضافه شده است. اگر راهاندازی نشده و بطور هوشمندانه آن را اجرا نکنیم، عملاً زمان اجرا را تغییری نمیدهند، اما در هر حال باعث افزایش اندازه کد میشوند.
مثالی از کد ++C را در ادامه ببینیم.
1// Class A declaration. Methods defined somewhere else;
2class A
3{
4public:
5 A(); // Constructor
6 ~A(); // Destructor (called when the object goes out of scope or is deleted)
7 void myMethod(); // Just a method
8};
9
10// Class B declaration. Methods defined somewhere else;
11class B
12{
13public:
14 B(); // Constructor
15 ~B(); // Destructor
16 void myMethod(); // Just a method
17};
18
19// Class C declaration. Methods defined somewhere else;
20class C
21{
22public:
23 C(); // Constructor
24 ~C(); // Destructor
25 void myMethod(); // Just a method
26};
27
28void myFunction()
29{
30 A a; // Constructor a.A() called. (Checkpoint 1)
31 {
32 B b; // Constructor b.B() called. (Checkpoint 2)
33 b.myMethod(); // (Checkpoint 3)
34 } // b.~B() destructor called. (Checkpoint 4)
35 {
36 C c; // Constructor c.C() called. (Checkpoint 5)
37 c.myMethod(); // (Checkpoint 6)
38 } // c.~C() destructor called. (Checkpoint 7)
39 a.myMethod(); // (Checkpoint 8)
40} // a.~A() destructor called. (Checkpoint 9)
متدهای کلاس های A، B و C در جای دیگری مثلا در فایلهای دیگر تعریف شدهاند. بنابراین کامپایلر نمیتواند آنها را تجزیه و تحلیل کند و نمیتواند بداند که آیا آنها استثناهایی را ایجاد میکنند یا خیر. بنابراین باید آماده رسیدگی به استثناهای پرتاب شده از هر یک از «سازندهها» (Constructors)، «تخریب کنندهها» (Destructors) یا فراخوانیهای سایر متدها باشد. تخریبکنندهها نباید ارسال کنند، اما کاربر میتواند به هر حال آبجکتی را ارسال کند، یا میتواند بهطور غیرمستقیم با فراخوانی یک تابع یا متد (به طور صریح یا ضمنی) که یک استثنا را ایجاد میکند، آن را به جایی دیگر ارسال کند.
اگر هر یک از فراخوانیهای myFunction یک استثنا ایجاد کند، مکانیسم باز کردن پشته باید بتواند تمام تخریبکنندههای اشیایی را که قبلا ساخته شدهاند فراخوانی کند. یکی از پیادهسازیهای مکانیزم باز کردن پشته از آدرس برگشتی آخرین فراخوانی از این تابع برای تأیید «بررسی شماره» تماسی که باعث ایجاد استثنا شده است استفاده میکند. این کار را با استفاده از یک تابع خود تولید شده کمکی انجام میدهد که نوعی جدول جستجو است و برای باز کردن پشته استفاده میشود، در صورتی که استثنایی از بدنه آن تابع پرتاب شود، که مشابه این خواهد بود:
1// Possible autogenerated function
2void autogeneratedStackUnwindingFor_myFunction(int checkpoint)
3{
4 switch (checkpoint)
5 {
6 // case 1 and 9: do nothing;
7 case 3: b.~B(); goto destroyA; // jumps to location of destroyA label
8 case 6: c.~C(); // also goes to destroyA as that is the next line
9 destroyA: // label
10 case 2: case 4: case 5: case 7: case 8: a.~A();
11 }
12}
اگر استثنا از checkpoint عدد ۱ و ۹ ارسال شود، هیچ آبجکتی نیاز به ازبین بردن ندارد. برای checkpoint عدد ۳ باید b و a تخریب شوند و برای checkpoint عدد ۶ باید c و a ازبین بروند. در تمامی موارد باید دستور تخریب رعایت شود، حتی برای checkpoints عدد ۷،۵،۴،۲ و ۸ فقط نیاز است که آبجکت a ازبین برود.
این تابع کمکی «اندازه» را به کد اضافه میکند و بخشی از فضای سربار است که C پلاس پلاس به C اضافه کرده است. بسیاری از برنامههای کاربردی تعبیه شده نمیتوانند این فضای اضافی را تهیه کنند. بنابراین، کامپایلرهای C پلاس پلاس برای سیستمهای جاسازی شده اغلب دارای یک «پرچم» (Flag) برای غیرفعال کردن استثناها هستند. غیرفعال کردن استثناها در ++C رایگان نیست، زیرا کتابخانه قالب استاندارد برای اطلاع رسانی خطاها به شدت به استثناها متکی است. استفاده از این طرح اصلاحشده بدون استثنا نیازمند آموزش بیشتر برای توسعهدهندگان ++C برای شناسایی مشکلات احتمالی یا یافتن باگ است.
در این بخش کمی در مورد C پلاس پلاس صحبت کردیم، زبانی که اصل آن این است: «برای چیزی که استفاده نمیکنید پولی پرداخت نکنید.» این توسعه در اندازه باینری برای زبانهای دیگری بدتر میشود، که باعث جمع کردن سربار اضافی با سایر ویژگیهایی که بسیار مفید هستند میشود، اما سیستمهای تعبیه شده قادر به پرداخت آن نیستند. در حالی که C به شما امکان استفاده از این ویژگیهای اضافی را نمی دهد، اما اجازه میدهد تا ردپای کد بسیار فشردهتری نسبت به سایر زبانها داشته باشید.
دلایل یادگیری زبان C کدامند؟
زبان C زبان سختی برای یادگیری نیست، با توجه به چیستی زبان برنامه نویسی C درمییابیم که براساس تمامی مزایایی که یادگیری آن به همراه دارد، این زبان تا حد خوبی بسیار ساده بدست خواهد آمد. برخی از این مزایا را در ادامه دنبال میکنیم.
C زبان میانجی
همانطور که قبلتر نیز گفته شد، زبان C یک زبان میانجی برای توسعهدهندگان است. بسیاری از پیاده سازیهای الگوریتمهای جدید در کتابها یا در اینترنت، فقط در C موجود است. این امر، حداکثر قابلیت حمل ممکن را برای اجرا فراهم میکند. برنامه نویسهای بسیاری وجود دارند که به دلیل بلد نبودن مفاهیم بسیار پایهای زبان C، مجبور میشوند تا یک الگوریتم پیادهسازی شده در C را در سایر زبانهای برنامه نویسی بازنویسی کنند. توجه داشته باشید که C یک زبان قدیمی و گسترده است، بنابراین خواهید توانست پیادهسازیهای انواع الگوریتمهای مختلف را در C، در سراسر وب، پیدا کنید. بنابراین به احتمال زیاد، دانستن این زبان برای شما سودمند خواهد بود.
تفکر به مانند زبان C
وقتی در مورد رفتار بخشهای خاصی از کد یا ویژگیهای خاصی از زبانهای دیگر، صحبت میکنیم، در پایان همهچیز به «حرف زدن به زبان C» ختم میشود. برای مثال «آیا در این بخش، به شی توسط اشارهگر، اشاره میکنیم یا به کل، شی را کپی کردهایم؟» و سایر مواردی که هنگام کد نویسی به ذهنمان میرسد و نیاز به بررسی آن داریم. ما هنگام تجزیه و تحلیل کد، به ندرت در مورد دستورالعملهای اسمبلیای که بخشی از کد یک زبان سطح بالا آن را اجرا میکند، بحث یا حتی فکر میکنیم. درعوض، هنگام بحث در مورد اینکه ماشین چه کاری انجام میدهد، عموماً به زبان C صحبت میکنیم. بنابراین، اگر نمیتوانید به این شیوه فکر کنید که چه کاری انجام میشود، ممکن است در نهایت درک کاملی از نحوه حل مسئله، حین برنامه نویسی نداشته باشید.
کار بر روی پروژه های هیجان انگیز C
بسیاری از پروژههای مهم و هیجانانگیز، از سرورهای بزرگ پایگاه داده و کرنلهای سیستم عامل گرفته برنامههای کوچک سیستمهای تعبیه شده که حتی میتوان در خانه برای مشغولیت و سرگرمی شخصی خود انجام داد، در C توسعه داده میشوند. به دلیل عدم آشنایی با زبان برنامه نویسی قوی و اثباتشدهای مانند C، خود را از انجام کارهایی که دوست دارید، محروم نکنید.
جمع بندی
در این مطلب به بررسی این موضوع پرداختیم که زبان برنامه نویسی C چیست و چه کاربردهایی دارد. نزدیکی زبان C به سختافزار، قابل حمل بودن و قابلیت پیشبینی استفاده از منابع این زبان را برای توسعه سطح پایین هستههای سیستم عامل و برنامههای کاربردی تعبیه شده عالی میکند. سازگاری، کارایی و عملکرد بالای زبان برنامه نویسی C، این زبان را به گزینه خوبی برای ابزارهای دستکاری دادهها با پیچیدگی قابل توجه تبدیل کرده است. امروزه بسیاری از زبانهای برنامه نویسی برای اهداف مورد نظرشان بهتر از C هستند، اما این مسئله بدان معنا نیست که در همه زمینهها نسبت به زبان C برتری دارند. وقتی صحبت از عملکرد به میان میآید زبان C همچنان بی رقیب است. امیدواریم این مطلب توانسته باشد دانش کلیای درباره استفاده از زبان C و نحوه کاربرد آن در پروژههای توسعه نرم افزار به شما داده باشد.
سلام و خسته نباشید
بسیار ریز و حرفه ای و گیرا توضیح دادید
با تشکر
سلام
عزیز در بخش
۱. گنجاندن فایل های سرآیند
پیجیده توضیح دادی فایل سرایند ، پیش پردازنده، ماکرو چی هستند ای کاش هر کدوم رو با حوصله توضیح میدادی من که خوندم بیشتر گیج شدم پیشنهاد میکنم یه مطلب درمورد اینکه در پس زمینه کامپیوتر یه برنامه C چطور اجرا میشه بنویسی اونجا مفهوم کتابخونه ، فایل هدر ، کد منبع ، فایل منبع ، پیش پردازنده ، ماکرو و … رو نشون بدی که هر کدوم وقتی نوبتشون میرسه چیکار میکنن و چطور یه Executable فایل در نهایت ساخته میشه اینجوری قابل درک میشه.
به امیداینکه پیشنهادم اثر داشته باشه
مرسی
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
از اینکه این مطلب مورد توجه شما قرار گرفته است بسیار خرسند و مفتخریم.
بابت پیشنهادی که ارائه دادید تشکر میکنیم و سعی خواهیم کرد در آینده مطلبی را به این موضوع اختصاص دهیم. در مورد مطلب زبان برنامه نویسی C، باتوجه به اینکه مطلبی برای معرفی اولیه زبان C بوده است، خیلی به جزئیات پرداخته نشده و هدف این مطلب صرفاً آشنایی علاقهمندان به این زبان کاربردی بوده است.
پیشنهاد میکنیم در صورت علاقه به یادگیری دقیقتر و کاملتر این زبان، از دوره آموزشی زبان C در سایت فرادرس استفاده کنید.
برای شما آرزوی سلامتی و موفقیت داریم.