زبان برنامه نویسی C یکی از پر کاربردترین زبان های برنامه نویسی است و اهمیت زیادی در علوم کامپیوتر دارد. زبان C را مادر همه زبان ها می دانند زیرا ریشه و اساس زبان های زیادی است، زبان هایC++ ، Objective-C، C#، جاوا، جاوا اسکریپت، پرل، PHP، پایتون و ….
ابتدا برای کار روی سیستم عامل ها برای کامپیوترهای کوچک توسعه داده شد اما در سال های اخیر در همه زمینه ها اهمیت زیادی پیدا کرده است. زبان C یک زبان برنامه نویسی سطح بالا، چندمنظوره، قابل حمل با کاربرد آسان است که با توجه به اینکه حدود ۵۰ سال پیش ساخته شده اما هنوز هم به شدت مورد استقبال قرار می گیرد و اغلب بین ۵ یا ۱۰ زبان محبوب و پرطرفدار جهان قرار می گیرد.
زبان برنامه نویسی C یک زبان رویه ای (Procedural) و همه منظوره (General-Purpose) است که به وسیلهی آن امکان دسترسی به حافظهی سیستم به صورت سطح پایین یا Low-Level وجود دارد. برنامهای که به زبان C نوشته شده است میبایست توسط یک کامپایلر (Compiler) زبان C اجرا شود تا به یک برنامهی قابل اجرا (Executable) تبدیل شود و کامپیوتر ها قادر به اجرا کردن آن باشند. بسیاری از نرم افزار ها و سیستم عامل ها مانند سیستم عامل هایی که بر پایه ی یونیکس هستند (Unix-Based) به وسیلهی زبان برنامه نویسی C نوشته شدهاند. امروزه زبان برنامه نویسی C بر روی بسیاری از پلتفرم های سخت افزاری و سیستم عامل ها مانند Microsoft Windows و Linux قابلیت اجرا دارند.
مزایا و معایب زبان C
زبان برنامه نویسی C دارای ویژگیها و مشخصههای زیادی است، به همین خاطر این زبان به پر استفاده ترین زبان برنامه نویسی در تمامی زمانها تبدیل شده است. از جمله مزایای مهم زبان C به قرار زیر است:
-
- ساختار یافته (Structured): زبان برنامه نویسی C، رویکرد ساختار یافته دارد، به این معنا که یک مسئله را به ماژولها و مسئلههای کوچکتر تقسیم میکند تا علاوه بر فهم راحت تر آن، تغییر در ساختار برنامه نویسی نیز راحت تر شود.
- قابل حمل (Portable): زبان C یک زبان مستقل از ماشین یا Machine-Independent است و برنامههای نوشته شده به این زبان بر روی ماشین های مختلف قابلیت اجرا دارند.
- زبان برنامه نویسی سطح میانی (Mid-Level Programming Language): زبان C یک زبان سطح میانی است. به همین علت، هم از ویژگی زبان های سطح بالا و هم از ویژگی زبان های سطح پایین بهرهمند میشود.
- کتابخانه های فراوان (Rich Library): زبان C دارای کتابخانه های داخلی (Built-in Library) زیادی است که سرعت روند توسعهی نرم افزار را بیشتر میکند.
- تخصیص حافظه به صورت پویا (Dynamic memory allocation): زبان C از تخصیص حافظه به صورت پویا پشتیبانی میکند. همچنین با استفاده از تابع ()free میتوان در هر زمان دلخواه، حافظههای تخصیص داده شده را خالی کرد.
- سرعت (Speed): زبان C یک زبان برنامه نویسی کامپایلری یا Compiler-Based است، که باعث میشود زمان اجرای یک کد سریعتر انجام شود (نسبت به زبان های تحت مفسر مثل پایتون)، همچنین به دلیل نداشتن گاربج کالکشن (Garbage Collection) و دیگر سربار های اضافی، قدرت پردازش ذخیره شده و در نهایت سرعت را افزایش میدهد.
- اشاره گرها (Pointers): یکی از ویژگی های زبان C، داشتن اشاره گر ها است. به وسیلهی اشاره گر ها میتوان به طور مستقیم با حافظهی سیستمی در تعامل بود، همین خاصیت باعث افزایش کارایی (Performance) برنامههای نوشته شده به زبان C میشود.
- قابل توسعه (Extensible): برنامههای نوشته شده به زبان C به راحتی قابل توسعه هستند. برای اضافه کردن ویژگی جدید به کدی که نوشته شده است، تنها نیاز به تغییرات کوچکی در کد است.
اگرچه زبان C با توجه به سینتکس ها، الگوریتم ها و ماژول های کم و سادهای که دارد برای برنامه نویسان تازه کار گزینهی خوبی است، اما این زبان یکسری معایبی نیز دارد که در لیست زیر به برخی از آنها اشاره کردهایم:
- ویژگی شی گرایی (OOP Features): زبان C به زبان شی گرایی ارتقاء نیافته است. برخلاف زبانهایی همچون جاوا، پایتون و سی پلاس پلاس نمیتوانیم در کد هایمان از خاصیت OOP مانند ارث بری از کلاس والد، وراثت چندگانه و … استفاده کنیم، که این کار باعث شده تا قابلیت استفاده ی مجدد از کد (Reusable Code) از برنامه نویسان زبان C گرفته شود.
- ویژگی فضای نام (Namespace feature): زبان C دارای ویژگی Namespace یا فضای نام نمیباشد، به همین علت نمیتوان در یک Scope از یک نام متغیر استفادهی مجدد کرد. بدون Namespace، تعریف دو متغیر با نام یکسان غیر ممکن است.
- بررسی در زمان اجرا (Run-time checking): زبان C، خطاهای کد را هنگام نوشتن هر خط کد، مشخص نمیکند. در عوض، تمامی خطاهای بوجود آمده، بعد از کامپایل کردن و نوشتن تمامی کد ها مشخص میشوند. این امر باعث میشود تا بررسی کد به یک چالش تبدیل شود، مخصوصا وقتی با برنامهی بزرگ سروکار داریم.
- مدیریت استثنا (Exception handling): زبان C قابلیت مدیریت کردن استثنا (Exception Handling) را ندارد. بنابراین قادر به مدیریت ناهنجاریها و باگهایی که حین نوشتن سورس کد (Source Code) بوجود میآید نمیباشد.
- سازنده و مخرب (Constructor and destructor): از آنجایی که زبان C یک زبان شی گرا نیست، در نتیجه توابع سازنده و مخرب در آن وجود ندارد. در واقع ساختن و تخریب کردن یک متغیر در زبان C میبایست به صورت دستی انجام شود.
- گاربج کالکشن (Garbage collection): گاربج کالکشن که در بعضی از متون فارسی به آن زباله رویی هم میگویند، فرآیندی است که در آن به طور اتوماتیک و بدون دخالت برنامه نویس، آبجکتهایی که خیلی وقت است مورد استفاده قرار نگرفتهاند از حافظه پاک میشود. این ویژگی در اکثر زبان های برنامه نویسی (به ویژه زبان های سطح بالا) وجود دارد اما زبان C فاقد این ویژگی است.
اهمیت یادگیری زبان C
زبان C برای بسیاری از زبان های برنامه نویسی یک زبان پایه است؛
بنابراین یادگیری C به عنوان زبان اصلی هنگام مطالعه سایر زبان های برنامه نویسی نقش مهمی را ایفا می کند.
این مفاهیم مشابه، انواع داده ها، عملگرها، دستورات کنترل و موارد دیگر را در اختیار شما قرار می دهد.
زبان C می تواند به طور گسترده ای در برنامه های مختلف استفاده شود.
C یک زبان برنامه نویسی ساختاری است که در آن برنامه به ماژول های مختلف تقسیم می شود.
هر ماژول را می توان جداگانه نوشت و با هم یک برنامه C واحد را تشکیل می دهند.
این ساختار آزمایش، نگهداری و اشکال زدایی فرآیندها را آسان می کند.
C شامل ۳۲ کلمه کلیدی، انواع مختلف داده و مجموعه ای از توابع داخلی قدرتمند است که برنامه نویسی را بسیار کارآمد می کند.
زبان برنامه نویسی C چگونه کار می کند؟
C یک زبان کامپایل شده است.
کامپایلر ابزاری خاص است که برنامه را کامپایل کرده و آن را به پرونده شیئی که قابل خواندن در ماشین است تبدیل می کند.
پس از فرآیند تدوین، لینک کننده پرونده های مختلف شی را با هم ترکیب می کند و یک فایل اجرایی منفرد برای اجرای برنامه ایجاد می کند.
امروزه، کامپایلرهای مختلفی به صورت آنلاین در دسترس هستند و شما می توانید از هر یک از این کامپایلرها استفاده کنید.
عملکرد هرگز تفاوتی نخواهد کرد و بیشتر کامپایلرها ویژگی های مورد نیاز برای اجرای برنامه های C و ++C را فراهم می کنند.
در زیر لیستی از کامپایلرهای محبوب موجود در اینترنت وجود دارد:
- کامپایلر کلنگ
- کامپایلر MinGW (مینیمالیست GNU برای ویندوز)
- کامپایلر قابل حمل C
- توربو سی
- Microsoft Visual Studio C++
- Lcc win
- Bloodshed
- C++ compilers
- Pelles C
برخی دیگر از کاربردهای زبان سی عبارتند از:
- طراحی و توسعه نرم افزارهای سیستم و برنامه های دسکتاپ
- توسعه پایگاه داده ها (پایگاه داده های معروف مانند MySQL، PostgreSQL، SQLite به زبان C نوشته شده اند.)
- توسعه برنامه های مرتبط با گرافیک مانند بازی های رایانه ای و موبایلی (کتابخانه های گرافیکی مانند OpenGL برای ارائه تصاویر گرافیکی دو بعدی و سه بعدی نیز به زبان C نوشته شده اند.)
- ارزیابی انواع معادلات ریاضی
- طراحی کامپایلرها، سیستم عامل ها و مفسرها
- توسعه کامل هسته یونیکس
- طراحی دستگاه های شبکه
- طراحی برنامه های GUI. Adobe Photoshop
- ساخت سیستم کنترل نسخه بسیار محبوب Git
- توسعه نرم افزارهای کاربردی مانند صفحات گسترده
در زمینه های دیگر نیز کاربرد دارد:
- اسمبلرها
- دستگاه و درایورها
- اینترنت اشیا
- تلفن های هوشمند
- سیستم های تعبیه شده (embedded systems)
بهتر است C برای سیستم هایی استفاده شود:
- که نیاز به دسترسی سریع و مستقیم به سخت افزار دارند.
- منابع محدود (مانند حافظه) دارند.
- کارایی مهمترین ویژگی آنها است.
هر جایی که فکر کنید از زبان C استفاده می شود، در یونیکس، لینوکس، ویندوز، فتوشاپ، وب سرور و ….
به عبارت کامل تر، زبان C پایه و اساسی برای یادگیری سایر زبان هاست .
برنامه Hello World به زبان C
“Hello World” برای هر برنامه نویس نقطه شروع یادگیری زبان است. این برنامه پیام “Hello World” را نمایش می دهد.
#include <stdio.h>
/* اولین برنامه من */
int main() {
printf(“Hello, World!”);
return 0;
}
دلایل استفاده از زبان برنامه نویسی C
امروزه زبان های برنامه نویسی سطح بالاتر امکانات بسیاری برای توسعه دهندگان فراهم می کنند اما دلایل زیادی وجود دارد که باور کنید برنامه نویسی C هنوز هم زنده است و مدت طولانی فعال خواهد ماند. در اینجا برخی از ویژگی ها و دلایل شکست ناپذیری زبان C آورده شده است:
انعطاف پذیری: زبان C ترکیبی از ویژگی های هر دو زبان سطح بالا و سطح پایین است. از یک طرف در برنامه نویسی سطح پایین مانند اسکریپت نویسی درایورها و هسته ها استفاده می شود و از طرف دیگر از عملکرد زبان های برنامه نویسی سطح بالا مانند اسکریپت نویسی برای برنامه های نرم افزاری و … پشتیبانی می کند.
ساختار گرامری ساده: C یک زبان ساده و آسان است و برای درک واضح و دقیق مفاهیم اساسی برنامه نویسی مانند انواع داده، عملگرها، دستورات کنترلی و بسیاری موارد دیگر بسیار مناسب است. ساختار تابعی، انواع داده ها و مجموعه ای غنی از توابع کتابخانه ای، آن را کارآمد و قدرتمند کرده است.
زبان رویه ای و ساخت یافته: برنامه نویسی C یک زبان رویه ای است که دستورات آن مرحله به مرحله اجرا می شود. یک برنامه C ممکنه شامل چند تابع برای انجام یک کار خاص باشد. C یک زبان برنامه نویسی ساخت یافته است. یعنی می توان برنامه را با استفاده از توابع به قسمت ها و بلوک ها کوچکتر تقسیم کرد تا درک و خوانایی آن آسان تر شود. یک زبان ساخت یافته زیرمجموعه ای از زبان رویه ای است.
سازگاری: ویژگی های مختلف C مانند: دسترسی مستقیم به APIهای سخت افزاری سطح ماشین، کامپایلرهای C، استفاده از منابع قطعی و تخصیص حافظه پویا باعث شده تا این زبان به یک گزینه ای ایده آل برای برنامه های اسکریپتی و درایورهای سیستم های نهفته یا تعبیه شده تبدیل شود.
قابلیت حمل: C یک زبان با قابلیت حمل بالا و مستقل از سخت افزار است. برنامه های C را می توان با کمی تغییر یا بدون تغییر در بسیاری از سیستم ها اجرا کرد.کامپایلرهای C برای همه سیستم عامل ها و سخت افزارها در دسترس است و به راحتی می توانید روی یک سیستم کد بنویسید و آن را به سیستم دیگری (با سیستم عامل یکسان) منتقل کنید.
زبان کامپایلری: C یک زبان کامپایلری است. کامپایلر برنامه ای است که زبان سطح بالا یا زبان سطح متوسط را به زبان ماشین، قابل فهم برای کامپیوتر تبدیل می کند.
سریع و قوی: C یک زبان بسیار کارآمد است و کامپایل و اجرای برنامه های آن نسبت به بیشتر زبان های دیگر بسیار سریعتر است. به دلیل اینکه C برای برنامه نویسی سیستم عامل یونیکس طراحی شده است و بسیار مهم است که برنامه بتواند با حافظه محدود به سرعت اجرا شود. یکی از قدرتمندترین و سریعترین زبان ها است و هنوز هم برای ساخت کامپایلرها و مفسرها از C استفاده می شود.