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

ویکی‎کتاب، کتابخانهٔ آزاد
پرش به ناوبری پرش به جستجو
Gnome-go-last.svg
Gnome-go-first.svg

همان طور که گفتیم زبان های برنامه نویسی به سه دسته سطح پائین ، سطح بالا و خیلی سطح بالا تقسیم می شوند . زبان های سطح پائین به زبان ماشین و زبان اسمبلی تقسیم می شوند و زبان اسمبلی نیز خود به دو سطح پائین ( اصلی ) و بالا تقسیم بندی میشود .

زبان های سطح بالا ، بی شمار هستند اما بر اساس خصیصه های مختلفی شناسایی می شوند . زبان های دستورگرا یا خط-به-خط یا بهتر بگوئیم : کد-به-کد ، زبان هایی هستند که از اسمبلی الگو گرفته و هر کدی که نوشته شده را خط به خط و کد به کد ، دستور می دهند که در نهایت اجرا خواهد شد . درست در خلاف جهت زبان های دستوری ، زبان های موضوعی یا هدف گرا هستند که طی آن ، شما آن چه را که قرار است به عنوان خروجی صادر شود برای کامپایلر شرح می دهید ، کامپایلر ابتدا کل متن شما را میخواند و سپسس خروجی مورد نظر شما را صادر می کند . خصیصه های دیگری نیز در زبان های برنامه نویسی وجود دارند ، همچون ساختار گرایی که کدها را داخل بلوک‌ها می نویسید تا بتوانید آنها را از یک دیگر متمایز کرده و هر کدام را هر موقع که خواستید به کار بگیرید ( زبان C ساختار گراست ) یا مثلاً شیئ گرایی ، یکی دیگر از قابلیت های برنامه نویسی است که زبان سی شیئ گرا Objective-C را شامل می شود ، اما نه زبان سی را ؛ شیئ گرایی قابلیتی از برنامه‌نویسی است که شما یک الگوی کامل از مجموعه‌ای از بلوک‌های تابع‌ها و یا داده‌ها را تعریف می‌کند و می‌توانید الگو را توسعه دهید و سپس از روی الگو نمونه‌هایی می‌سازید که هر نمونه یک شیئ نامیده می‌شود و خواص الگوی خود را دارد که البته می‌توانید آنها را تغییر دهید . این قابلیت ( شیئ‌گرایی ) باعث جلوگیری از اتلاف وقت می‌شود و به جای اینکه هر داده‌ای را که بخواهید بر روی آن پردازش انجام دهید ، یک به یک تعریف کنید ؛ یک بار یک الگوی کامل با خصیصه‌هایی تعریف می‌کنید و سپس از روی آن الگو نمونه‌ها یا همان شیئ‌ها را می‌سازید . زبان C شیئ‌گرا نیست و نزدیک به اسمبلی سطح بالا است ، اما با زبان سی به تمام ورودی‌ها و خروجی‌ها و گذرگاه‌های سیستم دسترسی دارید ، مخصوصاً که بیشتر عرضه کننده‌های کامپایلرها قابلیت ترکیب کردن زبان سی با زبان اسمبلی را فراهم می‌آورند . می توان گفت که تمام خصلت هایی که برای برنامه نویسی های سطح بالا شمرده می شود تنها کمک به راحت تر نوشته شدن ( و البته فهم آسان تر آن برای برنامه نویس ) و صرفه جویی در وقت است . هر برنامه ای که با زبان سطح بالا نوشته شود را می توان با زبان سطح پائین نیز نوشت ، اما هر برنامه ای که در زبان سطح پائین نوشته شده را نمی توان در زبان سطح بالا نوشت . اما وقتی زبان ها در سطح هم هستند به احتمال زیاد می توان آنها را به یکدیگر ترجمه نمود . شاید از عبارت ترجمه کمی تعجب کرده باشید ، بله ؛ زبان های برنامه نویسی را می توان توسط مبدل‌ها به یکدیگر ترجمه نمود . اما از آنجایی که ما در این کتاب قصد داریم تنها با زبان C کار کنیم به همین زبان می پردازیم ، جز اینکه در فصل ابتدایی مقدماتی را برای مبتدیان می‌نویسیم تا آماده یاد گیری زبان C شده باشند

چند بار از کلمه کامپایلر استفاده نمودیم . یک برنامه در یک فایل متنی با پسوند متناسب زبان خود نوشته و ذخیره می شود و سپس توسط کامپایلر Compiler به کدهای قابل ترجمه توسط پردازشگر ماشین ( CPU ) و یا کرنل سیستم عامل ( Kernel ) تبدیل میشود . در اکثر مواقع ، ما در هنگام برنامه نویسی کدها را در چند فایل متنی می نویسیم . وقتی همه آنها را کامپایل نمودیم ، زمان آن می رسد تا توسط پیوند دهنده یا لینکر Linker به صورت یکپارچه در آورده شده و یک خروجی قابل اجرا به وجود بیاوریم . در ویندوز حتماً فایل های exe یا dll را دیده اید . همه این برنامه ها توسط زبان‌های برنامه‌نویسی نوشته شده و سپس توسط کامپایلر و لینکر تبدیل به برنامه قابل اجرا شده‌اند . همچنین ممکن است شما در برنامه خود خطای مهلک یا خطای فاحش داشته باشید یا خطاهایی که می توانند برنامه شما را نامطلوب نمایند Bug ، در صورتی که قوانین استاندارد C را راعایت نکرده باشید ، کامپایلر ، برنامه شما را کامپایل یا ترجمه نخواهد نمود . در اینجا برنامه ای به نام اشکال‌زدا یا دیباگر Debugger برنامه ای که شما نوشته‌اید را میخواند و سپس به شما می گوید که در کدام قسمت‌های آن اشکال‌هایی وجود دارند که جلوی کامپایل شدن آن را میگیرند تا آنها را اشکال زدایی یا Debug نمائید . از طرفی ، گاهی اینکه مدام بنویسید و صبر کنید تا برنامه کامپایل و لینک شود و مدام اشکال زدایی کنید وقت گیر باشد ؛ برنامه هایی به نام مفسّر Interpretor وجود دارند که امکان اجرای متن برنامه شما را بدون تبدیل به کد سیستم عامل می دهند و در این صورت به سرعت هر تغییری که بخواهید اعمال می کنید و نتیجه آن را ارزیابی می نمائید .

زبان هایی مثل پرل Perl برای کامپایل شدن تعبیه نشده اند ، از همین روی برنامه های مفسّر ، فایل‌های متنی این گونه زبان ها را می خوانند و به اجرا می گذارند و اگر بخواهید که از این زبان‌ها برای نوشتن برنامه خود استفاده کنید باید این شرط برقرار گردد که کاربری که قصد استفاده از برنامه نوشته‌شده شما را دارد نیز محیط اجرای کد شما را داشته باشد

زمانی که شما برنامه ای را که نوشته اید را با موفقیت به خروجی رساندید ، برنامه شما تحت همان سیستم عاملی که نوشته‌اید قابل اجرا خواهد بود . بنابراین همان طور که قبلاً نیز گفتیم ، بسیاری از کامپایلر‌ها ، تحت سیستم عامل هستند و متن برنامه شما را به 0 و 1 ماشین تبدیل نمی کنند ، بلکه به کد های تحت سیستم عامل ترجمه می کنند تا در همان سیستم عامل ، مثلاً ویندوز اجرا گردند . بنابراین فایل های exe را سیستم عامل‌های مک Mac OS X به رسمیت نمی شناسند و ویندوز Microsoft Windows نیز فایل های dmg را به اجرا در نمی آورد . البته کامپایلرهای قدرتمند زبان C مثل Visual Studio از Microsoft و GCC از GNU قابلیت ترجمه به زبان ماشین را دارند و پروژه GCC (GNU Compiler Collection) قابلیت ترجمه برنامه شما به معماری‌های مختلف پردازشگرها ( مثل MIPS و ARM و PowerPC و Sparc و z390 و Itanium و ... ) را برای سیستم عامل‌های مختلف سری BSD ، سیستم عامل‌های مکینتاش macOS ، ویندوز و حتی سولاریس را دارد

سیستم عامل‌ها ، امکانات زیادی در جهت سهولت در ایجاد برنامه فراهم می کنند که همواره در حال به روز شدن هستند ؛ به همین علت است که یک برنامه در ویندوز ایکس پی Windows XP اجرا می شود اما در ویندوز ۷ نه ؛ چون برنامه نویس‌ها برای کم شدن حجم برنامه خود و آسان‌تر شدن برنامه نویسی از منابع سیستم عامل استفاده می کنند که این منابع ، خود یا دستور هایی که می گیرند و می دهند در هر به روز رسانی مایکروسافت تغییر می‌کنند . گرچه سازمان‌های فناوری رایانه و الکترونیک در تلاش هستند تا استانداردهایی را ایجاد کنند که مورد حمایت کمپانی های بزرگ همچون مایکروسافت ، اپل مکینتاش ، آی‌بی‌ام و ... برای سیستم عامل‌ها و از طرفی دیگر ، ارائه کنندگان کامپایلرها ، قرار گیرد تا در نهایت ، برنامه‌نویس با سهولت هر چه تمام‌تر بعد از نوشتن برنامه خود آن را برای تمام سیستم‌ها عرضه کند

بیان این نکته نیز خالی از لطف نیست که عبارت به کار گیرنده به مجموع کامپایلر ، لینکر ، دیباگر و مفسر گفته میشود .