فلسفه
در کتاب «طراحی و تکامل ++C» استراستروپ قوانین مورد استفاده در طراحی ++C را بیان مینماید. دانستن این قوانین به فهمیدن نحوه عملکرد ++C و چرایی آن کمک میکند. جزئیات بیشتر در کتاب قابل دسترسی است:++C طراحی شده است تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد.++C طراحی شده است تا مستقیما و بصورت جامع از چندین شیوه برنامهنویسی (برنامهنویسی ساختیافته، برنامهنویسی شیگرا، انتزاع داده، و برنامهنویسی جنریک)
++C طراحی شده است تا به برنامهنویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد.
++C طراحی شده است تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد.
++C از بکاربردن ویژگیهای خاص که مانع از عمومی شدن است خودداری مینماید.
++C از ویژگیهایی که بکار برده نمیشوند استفاده نمیکند.
++C طراحی شده است تا بدون یک محیط پیچیده عمل نماید.
کتابخانه استاندارد
در سال ۱۹۹۸ استاندارد ++C شامل دو بخش هسته زبان و کتابخانه استاندارد ++C است. این کتابخانه شامل بیشتر بخشهای STL و کتابخانه استاندارد C است. بیشتر کتابخانههای ++C در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانهها را میتوان در زبانهایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگیهای کامپایلر مشخص خواهد شد که کدام زبان را میتوان استفاده نمود.
کتابخانه استاندارد ++C شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگهدارندهها (مانند vector و list)، تکرارکنندهها (اشارهگرهای عمومی شده) برای شبیهسازی دسترسی مانند آرایه الگوریتمهایی برای جستجو و مرتبسازی در آنها وجود دارند. نقشهها (نقشههای چندگانه) (آرایه شرکتپذیر) و مجموعهها (مجموعههای چندگانه) واسطهای عمومی فراهم میسازند. در نتیجه با استفاده از قالب تابع، الگوریتمهای جنریک با هر نگهدارنده و دارای تکرارکننده عمل نماید. همانند C ویژگیهای کتابخانه را میتوان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. c دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شدهاند.استفاده از کتابخانه استاندارد - مانند std::vector یا std::string به جای آرایههای C- موجب ایجاد برنامههای مطمئنتر شده است.STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد ++C بوده است. استاندارد عبارت STL را بکار نمیبرد بلکه آن را بخشی از کتابخانه میداند اما مردم هنوز هم آن را برای جداسازی بخشهای مختلف کتابخانه با این نام بکار میبرند.(جریانهای ورودی/خروجی، جهانیسازی، تشخیص، زیرمجموعه کتابخانه C)
بیشتر کامپایلرها کتابخانه استاندارد و STL را پیادهسازی مینماید. پیادهسازیهای مستقلی نیز همانند STLport نیر وجود دارند. پروژههای دیگر نیز پیادهسازیهای خود را از STL با توجه به اهداف خود بوجود میآورند.
ویژگیهای معرفی شده در ++C
در مقایسه با C زبان ++C ویژگیهای جدیدی را معرفی نموده است مانند تعریف متغیر به عنوان عبارت، تغییر نوعهای همانند تابع، new/delete، نوع داده bool، توابع درونخطی، آرگومان پیشفرض، گرانبارسازی عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاسها (شامل تمام ویژگیهای مربوط به کلاسها همانند وراثت، اعضای تابع، توابع مجازی، کلاسهای انتزاعی، و سازندهها)، قالبها، پردازش استثنا، کنترل نوع زمان اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>).
برخلاف باور عموم ++C نوع داده ثابت را معرفی ننموده است. کلمه const کمی پیش از استفاده از این کلمه در ++C توسط زبان C بصورت رسمی بکار گرفته شد.در بعضی حالات ++C تعداد کنترل نوع بیشتری نسبت به زبان C انجام میدهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را در پایین ببینید)توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجددا در زبان ++C به کار گرفته شد.
بعضی ویژگیهای ++C بعدا توسط C به کار گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و کلمه inline با وجود اینکه تعریف این کلمه در C99 با تعریف آن در زبان ++C هماهنگی ندارد. همچنین در C99 ویژگیهایی معرفی شده است که در ++C وجود ندارند مانند ماکروهای قابل تغییر و استفااده بهتر از آرایهها به عنوان آرگومان. بعضی کامپایلرها این ویژگیها را پیاده نمودهاند اما در بقیه این ویژگیها موجب ناهماهنگی میگردد.
پیش پردازنده
++C بطور عمومی در سه فاز ترجمه میگردد: پیشپردازنده، ترجمه به کد object، پیوند (که دو مرحله آخر به عنوان عمل کامپایل شناخته میشود.) در اولین مرحله در پیشپردازنده، شبهدستورات پیشپردازنده تغییرات لغوی بر روی کد منبع ایجاد مینمایند و آن را به به مراحل دیگر تحویل میدهند.
شبه دستورات پیشپردازنده با استفاده از کاراکتر # قبل از هر گونه فضای خالی آغاز گشته و رشتههایی را در کد منبع با فایل یا رشتههای دیگر با توجه به قوانین تعریف گشته توسط برنامهنویس جایگزین مینماید. این دستورات معمولا اعمال زیر را انجام میدهند: جایگزینی ماکروها، شمول فایلهای دیگر (برخلاف ویژگی سطح بالاتر مانند شمول ماجولها/پکیجها/یونیتها/کامپوننتها)، کامپایل شرطی و/یا شمول شرطی. به عنوان مثال: #include >iostream >
که این دستور تمام سمبلها در فایل سرایند کتابخانه استاندارد iostream را در فایل منبع وارد میسازد.
کاربرد معمول دیگر به عنوان ماکرو خوانده میشود: (#define MY_ASSERT(x) assert(x
برچسب:
نویسنده: elshan
تاريخ: دوشنبه
23 ارديبهشت
1392 ساعت: 20:04