زبان برنامه نویسی سی/آشنایی با زبان های برنامه‌نویسی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
جزبدون خلاصۀ ویرایش
خط ۱:
{{سرص|زبان برنامه نویسی سی/پیش درآمدی بر برنامه نویسی|زبان برنامه نویسی سی/آشنایی با زبان سی C}}
همان طور که گفتیم زبان های برنامه‌نویسی به سه دسته سطح پائین ، سطح بالا و خیلی سطح بالا تقسیم می شوند . زبان های سطح پائین به زبان ماشین و زبان اسمبلی تقسیم می شوند و زبان اسمبلی نیز خود به دو سطح پائین ( اصلی و دستورالعمل‌های CPU یعنی Instruction Sets ) و بالا تقسیم بندی میشود .
 
زبان های سطح بالا ، بی شمار هستند اما بر اساس خصیصه های مختلفی شناسایی می شوند . زبان های '''دستورگرا''' یا خط-به-خط یا بهتر بگوئیم : کد-به-کد ، زبان هایی هستند که از اسمبلی الگو گرفته و هر کدی که نوشته شده را خط به خط و کد به کد ، دستور می دهند که در نهایت اجرا خواهد شد که مشمول زبان C نیز می‌شود . درست در خلاف جهت زبان های دستوری ، زبان های '''موضوعی''' یا هدف گراهدف‌گرا هستند که طی آن ، شما آن چه را که قرار است به عنوان خروجی صادر شود برای کامپایلر شرح می دهید ، کامپایلر ابتدا کل متن شما را میخواند و سپسسسپس خروجی مورد نظر شما را صادر می کند . خصیصه های دیگری نیز در زبان های برنامه‌نویسی وجود دارند ، همچون ساختارگرایی که کدها را داخل بلوک‌ها می نویسیدمی‌نویسید تا بتوانید آنها را از یک دیگر متمایز کرده و هر کدام را هر موقع که خواستید به کار بگیرید ( زبان C ساختار گراست ) یا مثلاً شیئ گراییشیئ‌گرایی ، یکی دیگر از قابلیت های برنامه نویسی است که زبان سی‌ِشیئ‌گرا Objective-C را شامل می شود ، اما نه زبان سی را ؛ شیئ گراییشیئ‌گرایی قابلیتی از برنامه‌نویسی است که شما یک الگوی کامل از مجموعه‌ای از بلوک‌های تابع‌ها و یا داده‌ها را تعریف می‌کند و می‌توانید الگو را توسعه دهید و سپس از روی الگو نمونه‌هایی می‌سازید که هر نمونه ،( که یک « شیئ » نامیده می‌شود و) خواص الگوی خود را دارد که البته می‌توانید آن را توسعه و تغییر دهید و آنها را کم یا زیاد کنید و یا مقادیر داخل نمونه را تغییر دهید . این قابلیت ( شیئ‌گرایی ) باعث جلوگیری از اتلاف وقت می‌شود و به جای اینکه هر داده‌ای را که بخواهید بر روی آن پردازش انجام دهید ، یک به یک تعریف کنید ؛ یک بار ، یک الگوی کامل با خصیصه‌هایی تعریف می‌کنید و سپس از روی آن الگو ، نمونه‌ها یا همان شیئ‌ها را می‌سازید . زبان C شیئ‌گرا نیست و نزدیک به اسمبلی سطح بالا است ، اما با زبان سی به تمام ورودی‌ها و خروجی‌ها و گذرگاه‌های سیستم دسترسی دارید ، مخصوصاً که بیشتر عرضه کننده‌هایعرضه‌کننده‌های کامپایلرها قابلیت ترکیب کردن زبان سی با زبان اسمبلی را فراهم می‌آورند . می توان گفت که تمام خصلت‌هایی که برای برنامه نویسی های سطح بالا شمرده می‌شود تنها کمک به راحت‌تر نوشته شدن ( و البته فهم آسان‌تر آن برای برنامه نویس ) و صرفه‌جویی در وقت است .<br>
هر برنامه ایبرنامه‌ای که با زبان سطح بالا نوشته شود را می توانمی‌توان با زبان سطح پائین نیز نوشت ، اما هر برنامه ایبرنامه‌ای که در زبان سطح پائین نوشته شده را نمی‌توان در زبان سطح بالا نوشت . اما وقتی زبان هازبان‌ها در سطح هم هستند به احتمال زیاد می توان آنها را به یکدیگر ترجمه نمود . شاید از عبارت ترجمه کمی تعجب کرده باشید ، بله ؛ زبان‌های برنامه‌نویسی را می توان توسط مبدل‌ها به یکدیگر ترجمه نمود . اما از آنجایی که ما در این کتاب قصد داریم تنها با زبان C کار کنیم به همین زبان می پردازیم ، جز اینکه در فصل ابتدایی مقدماتی را برای مبتدیان می‌نویسیم تا آماده یاد گیرییادگیری زبان C شده باشند
 
چند بار از کلمه کامپایلر استفاده نمودیم . یک برنامه در زبان‌های قابل کامپایل و ترجمه به Binary ماشین و یا codebyte کدبایت‌های قابل ترجمه توسط کرنل ، در یک فایل متنی با پسوند متناسب زبان خود نوشته و ذخیره می شود و سپس توسط کامپایلر Compiler به کدهای قابل ترجمه توسط پردازشگر ماشین ( CPU ) که همان 0 و 1 که پیشتر گفته شد و یا کرنل سیستم‌عامل ( Kernel ) و اجزاء کمکی سیستم‌عامل و کرنل ( کامپوننت‌ها Components ) تبدیل میشودشده و بر روی حافظه نوشته می‌شوند . در اکثر مواقع ، ما در هنگام برنامه نویسیبرنامه‌نویسی کدها را در چند فایل متنی می نویسیممی‌نویسیم . وقتی همه آنها را کامپایل نمودیم ، زمان آن می‌رسد تا توسط پیونددهنده یا لینکر Linker به صورت یکپارچه در آورده شده و یک خروجی قابل اجرا به وجود بیاوریم . در ویندوز حتماً فایل های exe یا dll را دیده‌اید . همه این برنامه‌ها توسط زبان‌های برنامه‌نویسی نوشته شده و سپس توسط کامپایلر و لینکر تبدیل به برنامه قابل اجرا شده‌اند . همچنین ممکن است شما در برنامه خود خطای مهلک یا خطای فاحش داشته باشید ( مثل Fatal Error ها ) یا خطاهایی که می توانند برنامه شما را نامطلوب نمایند Bug ، در صورتی که قوانین استاندارد C را راعایت نکرده باشید ، کامپایلر ، برنامه شما را کامپایل یا ترجمه نخواهد نمود . در اینجا برنامه ای به نام اشکال‌زدا یا دیباگر Debugger برنامه ای که شما نوشته‌اید را میخواند و سپس به شما می گوید که در کدام قسمت‌های آن اشکال‌هایی وجود دارند که جلوی کامپایل شدن آن را میگیرند تا آنها را اشکال زدایی یا Debug نمائید . از طرفی ، گاهی اینکه مدام بنویسید و صبر کنید تا برنامه کامپایل و لینک شود و مدام اشکال زدایی کنید وقت گیر باشد ؛ برنامه هایی به نام مفسّر Interpreter وجود دارند ( البته زبان C دارای دیباگرهای قدرتمندی مثل GDB از GNU و LLDB از پروژه LLVM که از پروژه GNU مشتق شده است می‌باشد که همانند مفسر عمل می‌کنند ) که امکان اجرای متن برنامه شما را بدون تبدیل به کد سیستم‌عامل مییا ماشین ، دهندمی‌دهند و در این صورت به سرعت هر تغییری که بخواهید اعمال می کنیدمی‌کنید و نتیجه آن را ارزیابی می نمائیدمی‌نمائید. . زبان هایی مثل پرل Perl برای کامپایل شدن تعبیه نشده‌اند ، از همین روی برنامه های مفسّر ، فایل‌های متنی این گونه زبان ها را می خوانندمی‌خوانند و به اجرا می گذارندمی‌گذارند و اگر بخواهید که از این زبان‌ها برای نوشتن برنامه خود استفاده کنید باید این شرط برقرار گردد که کاربری که قصد استفاده از برنامه نوشته‌شده شما را دارد نیز محیط اجرای کد شما را داشته باشد ( یعنی دست‌کم برنامه مفسّر Interpreter زبان پرل را که نسخه Version سازگار با برنامه نوشته شما باشد و البته ممکن است نیاز به برنامه‌های کمکی دیگر و کتابخانه‌هایی هم داشته باشد )
 
زمانی که شما برنامه ایبرنامه‌ای را که نوشته‌اید را با کامپایلر سیستم‌عامل خود با موفقیت به خروجی رساندید ، برنامه شما تحت همان سیستم عاملی که نوشته‌اید قابل اجرا خواهد بود . بنابراین همان طور که قبلاً نیز گفتیم ، بسیاری از کامپایلر‌ها ، تحت سیستم عاملسیستم‌عامل هستند و متن برنامه شما را به 0 و 1 ماشین تبدیل نمی کنند ، بلکه به کد های تحت سیستم عاملسیستم‌عامل ترجمه می کنندمی‌کنند تا در همان سیستم عامل ، مثلاً ویندوز اجرا گردند . بنابراین فایل های exe را سیستم عامل‌های مکینتاش macOS به رسمیت نمی شناسند و ویندوز Microsoft Windows نیز فایل های dmg را به اجرا در نمی آورد . البته کامپایلرهای قدرتمند زبان C مثل ++Visual Studio C از Microsoft و GCC از GNU قابلیت ترجمه به زبان ماشین را دارند و پروژه GCC ( GNU Compiler Collection ) قابلیت ترجمه برنامه شما به معماری‌های مختلف پردازشگرها ( مثل x86 و MIPS و ARM و PowerPC و Sparc و z390 و Itanium و ... ) را برای سیستم عامل‌هایسیستم‌عامل‌های مختلف سری BSD ، سیستم عامل‌های مکینتاش macOS یا iOS ، ویندوز و حتی سولاریس و بسیاری از سیستم‌عامل‌های دیگر را دارد
 
سیستم عامل‌ها ، امکانات زیادی در جهت سهولت در ایجاد برنامه فراهم می کنندمی‌کنند که همواره در حال به روز شدن هستند ؛ به همین علت است که یک برنامه در ویندوز ایکس‌پیاکس‌پی Windows XP اجرا می شودمی‌شود اما در ویندوز ۷ نه ؛ چون برنامه نویس‌هابرنامه‌نویس‌ها برای کم شدن حجم برنامه خود و آسان‌تر شدن برنامه‌نویسی ، تمام برنامه خود را و منابع مورد نیازش را نمی‌نویسند ، بلکه از منابع سیستم‌عامل استفاده می کنندمی‌کنند که این منابع ، خود یا دستورهایی که می گیرندمی‌گیرند و می‌دهند در هر به روز رسانی مایکروسافت ( و یا حتی سیستم‌عامل‌های دیگر ) تغییر می‌کنند . گرچه سازمان‌های فناوری رایانه و الکترونیک در تلاش هستند تا استانداردهایی را ایجاد کنند که مورد حمایت کمپانی های بزرگ همچون مایکروسافت ، اپل مکینتاش ، آی‌بی‌ام و ... برای سیستم عامل‌ها و از طرفی دیگر ، ارائه کنندگان کامپایلرها ، قرار گیرد تا در نهایت ، برنامه‌نویس با سهولت هر چه تمام‌تر بعد از نوشتن برنامه خود آن را برای تمام سیستم‌ها عرضه کند
 
بیان این نکته نیز خالی از لطف نیست که عبارت '''پیاده‌ساز''' ( Implementation ) در مجموع به کامپایلر ( Compiler ) ، لینکر یا پیونددهنده ( Linker ) ، دیباگر ( Debugger ) و مفسّر ( Interpreter ) گفته میشود