مهم است که محبوبیت برنامه خود را مجدداً ارزیابی کنید، به ویژه با توجه به مزیت های عظیم آن. متخصص پوست حداقل از این فونداسیون اطلاع دارد و حداکثر با برنامه جدید آشنا می شود. این یک سلف زبان هایی مانند C++، Objective-C، C#، Java است.

مایکروسافت برای توسعه زبان‌های مادری در پلتفرم Net خود از یک نحو شبیه به C استفاده کرده است. مهمتر از همه، هیچ سیستم عاملی به زبان C نوشته نشده است.

البته، Sie ایده آل نیست: سازندگان فیلم - کن تامپسون و دنیس ریچی - مدت زیادی را صرف سؤال کردن از Sie کردند. استانداردسازی همه چیز را آزار می دهد. بیش از 45 سال است که فعال است و فعالانه پیروز است.

اغلب نه یک، بلکه با دو زبان برنامه نویسی - C/C++ مرتبط است. با این حال، بهتر است در مورد Si "خالص" صحبت کنیم.

این زبان به زبان ALGOL (مخفف ALGorithmic Language) برمی گردد که در سال 1958 به طور مشترک با کمیته مطالعات اروپایی و آمریکایی در زمینه علوم کامپیوتر و با همکاری دانشکده فناوری عالی سوئیس زوریخ ایجاد شد. زبان بر اساس برخی از بخش های زبان FORTRAN بود و من سعی کردم آنها را اصلاح کنم. علاوه بر این، توسعه C ارتباط نزدیکی با ایجاد سیستم عامل یونیکس دارد که توسط کن تامپسون و دنیس ریچی نیز کار شده است.

یونیکس

پروژه MAC (کامپیوتر دسترسی چندگانه، شناخت به کمک ماشین، انسان و کامپیوتر) در سال 1963 در MIT آغاز شد.

به عنوان بخشی از پروژه MAS، سیستم عامل CTSS (سیستم اشتراک زمان سازگار) توسعه یافت. در نیمه دیگر دهه 60، تعدادی سیستم دیگر در همان زمان ایجاد شد، به عنوان مثال، BBN، DTSS، JOSS، SDC و خدمات اطلاعات و محاسبات چندگانه (MULTICS) و غیره.

Multics توسعه مشترک MIT، Bell Telephone Laboratories (BTL) و General Electric (GE) است که یک سیستم عامل را همزمان برای کامپیوتر GE-645 ایجاد کرد. کامپیوتر باقی مانده تحت Multics در 31 ژوئن 2000 به سرقت رفت.

Prote BTL این پروژه را در سال 1969 آغاز کرد.

همکاران او (کن تامپسون، دنیس ریچی، استو فلدمن، داگ مک ایلروی، باب موریس، جو اوسانا) می خواستند کار را به تنهایی ادامه دهند. تامپسون روی پروژه سفر فضایی در GE-635 کار کرد. آنها نسخه اصلی را برای Multics نوشتند و سپس آن را در Fortran تحت GECOS در GE-635 بازنویسی کردند. Gra بدنه های سیستم سونیا و گرانش مورد نیاز برای فرود کشتی بر روی یک سیاره یا ماهواره را مدلسازی کرد.

نه نرم افزار و نه سخت افزار کامپیوتر شما برای بازی مناسب نبود. تامپسون یک جایگزین پیدا کرد و بازی را روی یک PDP-7 بدون مالک بازنویسی کرد. این حافظه دارای ظرفیت 8K کلمات 18 بیتی بود و همچنین یک پردازنده نمایش برداری برای تولید گرافیک های زیبا وجود داشت.


تصاویر از slideshare.net

تامپسون و ریچی توسعه چند اسمبلر را در جنرال الکتریک انجام دادند و کد را به صفحات پانچ منتقل کردند. تامپسون به طور فعال از این روش پیروی نکرد و شروع به نوشتن یک سیستم عامل برای PDP-7 کرد و از سیستم فایل شروع کرد. یونیکس اینگونه کار می کند.

تامپسون می خواهد محاسبات راحت تری را ایجاد کند که مطابق با طراحی او طراحی شده و با استفاده از هر ویژگی در دسترس است. در ذهن ما، بدیهی است که به گذشته نگاه می کنیم، نوآوری های زیادی در Multics وجود دارد، از جمله مفهوم فرآیند به عنوان پایه کنترل، یک سیستم فایل درخت مانند، یک مفسر فرمان مانند برنامه های کامپیوتری، ارائه ساده فایل های متنی و دسترسی مجاز. به دستگاه ها

PDP-7 UNIX همچنین زبان پر ریشه B را که تحت هجوم زبان BCPL ایجاد شد، جوانه زد. دنیس ریچی گفت که هیچ نوع وجود ندارد. BCPL در 8 کیلوبایت حافظه قرار دارد و به معنای واقعی کلمه توسط تامپسون دوباره کار شده است. ویروس U postuvo در Z.


تصویر از سایت it-world.com

تا سال 1973، زبان C شروع به رشد کرد و بیشتر هسته‌های یونیکس که در ابتدا به زبان اسمبلی PDP-11/20 نوشته شده بودند، به زبان C بازنویسی شدند. این یکی از اولین هسته های سیستم عامل بود که به روش خودم به زبان اسمبلر نوشته شد.

به نظر می رسد که این یک محصول جانبی بر اساس ایجاد سیستم عامل یونیکس نیست.

پدران سی

بر اساس ALGOL-60، آزمایشگاه ریاضی دانشگاه کمبریج به همراه دپارتمان کامپیوتر دانشگاه لندن CPL (زبان برنامه نویسی ترکیبی) جدید را در سال 1963 ایجاد کردند.

مشخص شد که CPL تاشو است و در سال 1966 مارتین ریچاردسون BCPL را ایجاد کرد و هدف اصلی آن نوشتن کامپایلرها بود. عفونت عملا پیروز نیست، اما در زمان خودش، از طریق قابلیت حمل خوب، نقش مهمی ایفا خواهد کرد.

BCPL در اوایل دهه 1970 در چندین پروژه از جمله سیستم عامل OS6 و اغلب در محصولات زیراکس PARC فعال بود.

BCPL به عنوان جد زبان Bi (B) بود که در سال 1969 توسط آزمایشگاه های تلفن بل معروف AT&T شکل گرفت که توسط کن تامپسون و دنیس ریچی کمتر معروف بود.

مانند سایر سیستم عامل های آن زمان، یونیکس به زبان اسمبلی نوشته می شد. راه اندازی برنامه های زبان اسمبلی به خوبی کار می کند. تامپسون معتقد بود که برای توسعه بیشتر سیستم عامل، به یک زبان سطح بالا نیاز است و زبان کوچکی را ارائه کرد. B. تامپسون زبان BCPL را به عنوان پایه در نظر گرفت. زبان B را می توان مانند C بدون نوع نوشت.

بسیاری از جزئیات BCPL، B و C از نظر نحوی متفاوت هستند، اما مهمتر از همه آنها مشابه هستند. برنامه ها از توالی اعلامیه ها و عملکردهای جهانی (رویه ها) شکل می گیرند. در BCPL، رویه‌ها می‌توانند تودرتو باشند، اما نمی‌توانند به اشیاء غیراستاتیکی که در رویه‌هایی که جایگزین آن‌ها هستند، تعریف شده‌اند. B و C با معرفی یک رویه مجلل از چنین تبادلی اجتناب می کنند: هیچ روشی برای درج وجود ندارد. برنامه (بدون نسخه های اخیر B) از کامپایل جداگانه پشتیبانی می کند و ویژگی هایی را برای گنجاندن متن در نام فایل ها ارائه می دهد.

برخلاف تغییرات گسترده در نحو که در طول توسعه B رخ داد، معنای اصلی BCPL - ساختار انواع و قوانین آن برای شمارش عبارات - ناتمام ماند. کلمات آشکار بدون نوع هستند، یا بهتر است بگوییم یک نوع داده وجود دارد - "کلمه" یا "تجاری"، مجموعه ای از بیت های یک تاریخ ثابت. خاطره این افراد آرایه ای از این وسط هاست و مکان های میانی در وسط قرار دارند تا زمانی که عملیات قبل از آن راکد شود. به عنوان مثال، عملگر "+" به سادگی عملوندهای خود را در پشت دستور ماشین اضافه می کند و سایر عملیات های حسابی را نیز قبل از جایگزینی عملوندهای آنها اضافه می کند.

نه BCPL، نه B و نه C در داده های کاراکتر من قابل مشاهده نیستند. آنها به ردیف های دارای بردار اعداد صحیح احترام می گذارند و قوانین کثیف را با نوعی لذت تکمیل می کنند. I در BCPL، و ردیف B به معنای آدرس ناحیه استاتیک است که با نمادهای ردیف بسته بندی شده در جعبه ها مقداردهی اولیه شده است.

نحوه ایجاد

در سال 1970، آزمایشگاه بل یک کامپیوتر PDP-11 را به پروژه اضافه کرد. قطعات B آماده اجرا در PDP-11 بودند، تامپسون قسمت UNIX را در B بازنویسی کرد.

همچنین، مدل B و BCPL زمانی را صرف کار با شاخص‌ها کردند: قوانین زبان، شناسایی یک شاخص به‌عنوان شاخص در آرایه‌ای از کلمات، شاخص‌های کارکرده با نمایه‌های کلمات. پوسته نمایشگر باعث ایجاد مقیاس بندی نمایشگر در آدرس بایتی پردازنده می شود.

مشخص شد که برای مقابله با کاراکترها و آدرس دهی بایت و همچنین آماده شدن برای پشتیبانی سخت افزاری برای محاسبات ممیز شناور، تایپ مورد نیاز است.

در سال 1971، ریچی شروع به ایجاد یک نسخه توسعه یافته از B کرد. برای اولین بار، او آن را NB (New B) نامید، اما زمانی که شروع به تنوع بسیار زیادی از B کرد، نام آن به C. Oscho تغییر کرد و خودش در مورد آن نوشت. ریچی:

من می‌خواهم ساختار نه تنها یک شی انتزاعی را مشخص کند، بلکه مجموعه بیت‌هایی را که می‌توان از کاتالوگ خواند نیز توصیف کرد. کامپایلر در کجا می‌تواند شاخصی را در مورد معنای معنایی ایجاد کند؟ به نظر می‌رسد که ساختارها انتزاعی‌تر تصور می‌شدند و می‌توانست جای نشانگرها را در اینجا اشغال کند، گویی من مشکل فنی راه‌اندازی صحیح این شاخص‌ها را با حافظه برای جسم تاشو حل کرده بودم، شاید ساختارها، با آرایه چه کار کنیم، با ساختارها چه کنیم، و غیره تا عمق کامل؟

راه حل یک گام تعیین کننده در بند تکاملی بین BCPL بدون نوع و C تایپ شده بود. از جمله تحقق نشانگر در همزمانی، و آناتومی نسل ایجاد آن، اگر جرم آن در virazi حدس زده شود. قاعده ای که در C امروزی حفظ شده است، این است که مقادیر آرایه ها، اگر با عبارت تشخیص داده شوند، به نشانگر برای اولین اشیاء تبدیل می شوند، بنابراین کل آرایه ایجاد می شود.

نوآوری دیگری که به وضوح از پیشینیان خود متمایز است، افزایش ساختار انواع و به ویژه تنوع نحو اعلان است. NB با ایجاد انواع اساسی int و char همراه با آرایه ها و نشانگرهای آنها و راه های دیگر برای ترکیب آنها.

لازم به ذکر است: برای یک شی از هر نوع، می توان یک شی جدید را توصیف کرد، که عکس برگردان این اشیاء را در آرایه ها متحد می کند، عملکرد آن را حذف می کند یا توصیف کننده یک شی جدید است.



تصاویری از کتاب "Mova Si": M. Waite, S. Prata, D. Martin

برای هر شی از چنین نوع انباری، از قبل راهی برای اشاره به شی وجود دارد که بخشی از آن است: آرایه را فهرست بندی کنید، تابع را فراخوانی کنید، عملگر متغیر غیر مستقیم را از نشانگر انتخاب کنید. حذف مشابهی باعث شد که نحو نام‌ها کم‌رنگ شود، که با نحو تعریف که در آن این نام‌ها ویکوریزه می‌شوند، متفاوت است. بنابراین

صداهای کل، اشاره گر در کل و اشاره گر به اشاره گر در کل. نحو آنها به وضوح با این واقعیت منعکس می شود که i، *pi و **ppi همگی در صورت استفاده در عبارت به یک نوع int منجر می شوند. رتبه مشابه
تابعی که هدف را می چرخاند، تابعی که نشانگر را روی هدف می چرخاند، نشانگر روی تابعی که هدف را می چرخاند، انتخاب کنید.
برای کر کردن یک توده پوکازچیک در کل، پوکازچیک روی یک توده از کل.

در همه این انواع حیرت، فرد متغیر، ویکور ویروس را پیش بینی می کند که نوع آن مانند ابتدای حیرت است.

سنگ های دهه 70: "ساعت مشکل" و گویش های نادرست

تا سال 1973، این زبان پایدار شد تا یونیکس بر روی آن بازنویسی شود. جابجایی به C یک مزیت مهم دارد: قابلیت حمل. با نوشتن یک کامپایلر C برای ماشین پوست در آزمایشگاه های بل، تیم توسعه می تواند یونیکس را برای آنها پورت کند.

پیتر مویلان در کتاب خود با عنوان «پرونده علیه سی» می نویسد: «زبانی برای دور زدن قوانین خشن تحمیل شده بر اکثر دولت های سطح بالا و اطمینان از قابل اعتماد بودن آنها لازم است. نیاز به زبانی وجود داشت که کار کسانی را که قبل از آن تنها می‌توانستند به صورت اسمبلی یا همتراز با کد ماشین پیاده‌سازی کنند، امکان‌پذیر بود.»

در دهه 70 به رشد خود ادامه داد. در دهه‌های 1973-1980، زبان رشد کرد: ساختار انواع از انواع بدون علامت، طولانی حذف شد، ترکیب شد و دوباره تفسیر شد، ساختارها به کلاس‌های شی نزدیک شدند (هیچ نمادی برای لفظ وجود نداشت).

اولین کتاب با سی. کتاب "برنامه نویسی زبان سی" که توسط برایان کرنیگان و دنیس ریچی نوشته شده و در سال 1978 منتشر شده است به کتاب مقدس برنامه نویسان سی تبدیل شده است. به دلیل نداشتن استاندارد رسمی، این کتاب - به قول شیطنت‌ها با نام K&R یا "کتاب سفید" در واقع به یک استاندارد تبدیل شده است.


تصویر از سایت Learnc.info

در دهه 1970 برنامه های C زیادی وجود نداشت و بیشتر آنها توسعه دهندگان یونیکس بودند. تیم کم نیست، در دهه 80 دنیای یونیکس فراتر از مرزها بود. کامپایلرهای Ci بر روی ماشین های مختلفی که تحت کنترل سیستم عامل های مختلف اجرا می شوند در دسترس هستند. Zokrema، Si در پلتفرم IBM PC که به سرعت در حال توسعه است، گسترده شد.

K&R ویژگی های زیر را برای فیلم ارسال کرد:

ساختارها (ساختار نوع داده)؛
dovge tsile (نوع داده long int);
بدون علامت (نوع داده بدون علامت int)؛
عملگر += و مشابه موارد قبلی (عملگرهای قدیمی =+ تحلیلگر واژگانی کامپایلر C را به خطا معرفی کردند، به عنوان مثال، با عبارات مساوی i = + 10 و i = +10).

K&R C اغلب به عنوان مهمترین بخش زبان مورد احترام است، زیرا کامپایلر C ممکن است از آن پشتیبانی کند. پس از انتشار ANSI خطرات زیادی وجود دارد و حداقل سطح احترام به آنچه برنامه نویسان می خواهند به حداکثر قابلیت حمل از برنامه های خود دست یابند وجود دارد، زیرا همه کامپایلرها ANSI C پشتیبانی شده یکسان نیستند و کد K&R C خوب ANSI C است. درست.

در همان زمان، مشکلات ناشی از افزایش محبوبیت بود. برنامه هایی که کامپایلرهای جدید نوشتند بر اساس زبان توصیف شده در K&R بودند. متأسفانه، K&R اغلب ویژگی‌های فیلم‌های خود را توصیف می‌کرد، بنابراین گردآورندگان اغلب آنها را به صلاحدید خود تفسیر می‌کردند. علاوه بر این، کتاب تقسیم بندی واضحی بین ویژگی های زبان و ویژگی های سیستم عامل یونیکس نداشت.

پس از انتشار K&R C، تعدادی از ویژگی های پشتیبانی شده توسط کامپایلرهای AT&T و سایر کامپایلرها به زبان اضافه شد:

توابعی که مقادیر را نمی چرخانند (با نوع void) و نشانگرهایی که نوع را تغییر نمی دهند (با نوع void *)؛
توابعی که ساختار یکپارچه را می چرخانند.
نام فیلدهای این ساختارها در نواحی مختلف نام ساختار پوست;
واگذاری سازه ها؛
مشخص کننده ثابت (const)؛
یک کتابخانه استاندارد که اکثر توابع ارائه شده توسط توسعه دهندگان مختلف را پیاده سازی می کند.
نوع به بیمه بیش از حد (enum);
یک عدد کسری دقیق (شناور).

وضعیت بدتر می شد و مواردی که پس از انتشار K&R همچنان در حال توسعه بودند: امکانات جدید اضافه شدند و موارد قدیمی حذف شدند. برای نزابر روشن بود که نیاز به توصیف جامع، دقیق و مرتبط با زبان است. بدون چنین استانداردی، لهجه‌های زبانی شروع به ظهور کردند که بر قابل حمل بودن تکیه داشتند - قوی‌ترین جنبه زبان.

استاندارد

در پایان دهه 1970، این زبان شروع به توسعه بیسیک کرد، که در آن زمان استاندارد برنامه نویسی میکرو کامپیوترها بود. در دهه 1980، با معماری IBM-PC سازگار شد که منجر به کاهش قابل توجهی در محبوبیت آن شد.

مؤسسه استانداردهای ملی آمریکا (ANSI) توسعه استاندارد MoviC را آغاز کرد. در سال 1983، کمیته X3J11 برای توسعه استاندارد تشکیل شد. اولین نسخه این استاندارد در سال 1989 منتشر شد و C89 نام داشت. در سال 1990 تغییرات جزئی در استاندارد تصویب شده توسط سازمان بین المللی استاندارد ISO ایجاد شد. سپس تحت کد ISO/IEC 9899:1990 شناخته شد و در بین برنامه ها نام آن ثابت شد که با پذیرش استاندارد مرتبط بود: C90. در حال حاضر نسخه باقی مانده از استاندارد، استاندارد ISO/IEC 9899:1999 است که با نام C99 نیز شناخته می شود، که در سال 2000 تصویب شد.

در میانه نوآوری استاندارد C99، باید احترام به تغییر قوانین را افزایش داد تا تغییر دهندگان را بیهوش کرد. اکنون می توان تغییرات جدید را در وسط کد اعلام کرد و نه تنها در بلوک انبار و در ناحیه دید جهانی.

ویژگی های C99:

توابع (داخلی)؛
کوری تغییرات محلی در هر عملگر متن برنامه (مانند C++).
انواع داده های جدید، مانند long long int (برای سهولت در رفتن از اعداد 32 به 64 بیتی)، نوع داده Boolean صریح _Bool و نوع پیچیده برای نشان دادن اعداد مختلط.
توده های تغییر;
تشویق شاخص های محدود (محدود کردن)؛
مقداردهی اولیه ساختارها نامگذاری شده است: struct ( int x, y, z; ) point = ( .y=10, .z=20, .x=30 );
پشتیبانی از نظرات تک خطی که با // شروع می شوند، نوشته شده در C++ (بسیاری از کامپایلرهای C در گذشته آنها را به عنوان یک اضافه پشتیبانی می کردند).
یک دوجین توابع کتابخانه جدید، مانند snprintf.
دسته ای از فایل های هدر جدید، مانند stdint.h.

استاندارد C99 تا حد زیادی توسط همه کامپایلرهای زبان C فعلی پشتیبانی می شود. در حالت ایده‌آل، کدهایی که به زبان C با آخرین استانداردها و بدون خرابی سخت‌افزار و کدهای مستقل از سیستم نوشته می‌شوند، هم تبدیل به کدهای سخت‌افزاری و هم مستقل از پلتفرم می‌شوند.

در سال 2007، کار بر روی استاندارد جدید فیلم C آغاز شد. در 8 ژانویه 2011، استاندارد جدیدی برای فیلم C (ISO/IEC 9899:2011) منتشر شد. ویژگی های استاندارد جدید توسط کامپایلرهای GCC و Clang پشتیبانی می شود.

ویژگی های اصلی C11:

بهبود جریان غنی؛
پشتیبانی یونیکد بهبود یافته است.
ماکروهای سفارشی (نوع عبارات عمومی، اجازه تفسیر مجدد استاتیک را می دهد).
ساختارهای ناشناس و تجمع (ساده سازی ساختار به ساختارهای تودرتو).
درمان اشیاء؛
ادعاهای ایستا؛
توابع ناامن از راه دور دریافت می شود (برای gets_s ناامن).
تابع quick_exit;
مشخص کننده تابع _Noreturn;
حالت دسترسی انحصاری به فایل جدید

صرف نظر از در دسترس بودن استاندارد یازدهم، بسیاری از کامپایلرها هنوز از نسخه C99 پشتیبانی نمی کنند.

چرا سی مورد انتقاد قرار می گیرد؟

او آستانه بالایی برای ورود دارد که موفقیت او را در ابتدا به دلیل برنامه نویسی زبان اولش پیچیده می کند. هنگام برنامه نویسی به زبان C، باید جزئیات زیادی را در نظر بگیرید. ویکی‌پدیا می‌نویسد: «افراد در میان هکرها با سبک متفاوت برنامه‌نویسی، اغلب ناامن، تشویق می‌شوند و می‌خواهند کد مبهم بنویسند.

این انتقاد توسط پیتر مویلان نیز به خوبی مستدل بود. او 12 صفحه را به نقد اختصاص داد. بیایید به چند قطعه نگاه کنیم:

مشکلات ماژولاریته
برنامه نویسی ماژولار امکان پذیر است، اما تنها در صورتی که برنامه نویس قوانین سختگیرانه زیر را رعایت کند:

یک فایل هدر برای ماژول پوست مقصر است. مسئولیت ما این است که از افشای نمونه های اولیه تابع صادر شده، توصیف هر چیز دیگری (به جز نظرات) خودداری کنیم.

رویه خارجی که برای این ماژول فراخوانی می کند فقط نظرات را در فایل هدر می بیند.

برای تایید یکپارچگی ماژول پوسته، باید فایل هدر را وارد کنید.

برای وارد کردن اطلاعات از یک ماژول دیگر، ماژول پوسته باید شامل ردیف‌های #include و همچنین نظرات برای نشان دادن آنچه وارد می‌شود باشد.

نمونه های اولیه تابع را می توان از فایل های هدر تغییر داد. (این قانون ضروری است، زیرا زبان مکانیسمی برای تأیید اینکه تابع در همان ماژول نمونه اولیه آن پیاده سازی شده است ندارد؛ بنابراین تغییر نمونه اولیه می تواند این واقعیت را پنهان کند که تابع وجود ندارد - یک تابع گم شده است).

هر تغییر کلی در ماژول، یا هر تابع وارد شده از طریق فایل هدر، ثابت باقی می ماند.

ردیابی کامپایلر به فراخوانی تابع بدون نمونه اولیه ارسال می شود. پس پیشاپیش باید به رد به چشم رحمت بنگرید.

این برنامه وظیفه دارد اطمینان حاصل کند که نمونه اولیه پوست مشخص شده در فایل هدر احتمالاً دارای یک تابع غیر خصوصی است که تحت نام های مشابه در همان ماژول پیاده سازی شده است. متأسفانه، ماهیت زبان تأیید خودکار این مورد را دشوار می کند.

آثار سوء ظن قبل از استفاده از ابزار grep قرار می گیرد. از آنجایی که نمونه اولیه انتقام در جای خود نیست، رحمتی برای همه چیز است.

در حالت ایده‌آل، برنامه‌هایی که با یک فرمان اجرا می‌شوند نیازی به اشتراک دسترسی به فایل‌های مشابه ندارند. تقصیر شماست که هم ماژول های شی و هم فایل های هدر را ویکوریزه می کنید.

مشکل آشکار این است که افراد کمی از این قوانین پیروی می کنند، زیرا کامپایلر نمی تواند به راحتی آنها را دنبال کند. برنامه نویسی ماژولار اغلب برنامه نویسان خوب را از هرج و مرجی که برنامه های بد ایجاد می کنند نجات می دهد. اما ما نمی توانیم به اندازه کافی زبان کسب کنیم.



تصویر از smartagilee.com
مشکلات مربوط به اندیکاتورها
صرف نظر از همه پیشرفت‌ها در تئوری و عملی ساختارهای داده، شاخص‌ها از یک مانع بزرگ برای برنامه‌نویسان محروم هستند. کار با شاخص ها بخش قابل توجهی از ساعتی را که صرف توسعه برنامه ها می شود را به خود اختصاص می دهد و خود آنها مشکلات بیشتری را ایجاد می کنند که توسعه آنها را پیچیده می کند.

شاخص های مهم و غیر مهم را می توان تشخیص داد. شاخصی که برای ایجاد و پشتیبانی از ساختار داده ها ضروری است برای درک ما مهم است.

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

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

دلیل دیگر قانون زبان C است که در آن تمام پارامترها و توابع وظیفه ارسال مقادیر را بر عهده دارند. اگر به معادل یک پارامتر VAR در فیلم پاسکال یا یک پارامتر inout در فیلم Ada نیاز دارید، تنها راه حل عبور نشانگر است. این موضوع در مورد خواندن ضعیف برنامه C توضیح زیادی می دهد.

اگر لازم باشد یک شاخص مهم به عنوان پارامتر ورودی/خروجی ارسال شود، وضعیت بدتر می شود. این نوع تابع نیاز به انتقال اشاره گر به اشاره گر دارد که پیدا کردن موارد مناسب را برای برنامه نویسان دشوار می کند.

سی - زنده

بر اساس داده های سال 2016، شاخص TIOBE محبوبیت رو به رشد برنامه نویسی ما را نشان می دهد و نشان می دهد که C در جایگاه دوم قرار دارد:

اجازه دهید فقط بگویم که این منسوخ شده است و گسترش گسترده تر آن میراث خوش شانسی و روابط عمومی فعال است. اجازه دهید به شما بگویم که بدون یونیکس این زبان هرگز ساخته نمی شد. افزودن برچسب

من انتخاب می کنم که بخش های انتخابی استاندارد C++ را منتشر کنم.

کار بر روی استاندارد 2017 به زودی تکمیل خواهد شد. Ale chinnym در حال حاضر استاندارد سنگ 2014 است. نسخه رسمی به صورت استاندارد پرداخت می شود (قیمت 133 دلار).

با این حال، در وب سایت رسمی می توانید نسخه 2014 را دانلود کنید (غیر رسمی، در غیر این صورت کار می کند و کاملاً برای تبدیل مناسب است). به همین دلیل است که دروسی را برای استاندارد راک 2014 در وب سایت خود منتشر می کنم.

شما می توانید سند را ببینید و خودتان آن را بخوانید. با این حال، سند اصلی برای کسانی که ازدواج شما را پیچیده تر می کند. به همین دلیل این حماسه را با ترجمه شروع کردم.

Trivatime برای مدت طولانی، زیرا غیرقابل تصور نیست))) زیرا استاندارد بیش از 1300 صفحه دارد.

اما من شک دارم که ظاهر کسی قهوه ای شود. بنابراین، و همچنین برای اینکه زبان انگلیسی را فراموش نکنم، گاهی اوقات کار می کنم ...

اجازه دهید با یک یادداشت کوتاه از سمت اول سند به پایان برسانیم ...

شماره سند: N4296
تاریخ: 2014-11-19
Pereglyad: N4140
موضوع: ریچارد اسمیت
شرکت گوگل
[ایمیل محافظت شده]

پروژه کاری، استاندارد برای برنامه نویسی

زبان C++

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

مهم!
همه کامپایلرها و ابزارهای توسعه دقیقاً استانداردها را رعایت نمی کنند. برخی از توابع تعریف شده توسط استاندارد ممکن است توسط کامپایلر پشتیبانی نشوند. و همچنین کامپایلرها می توانند توابع و کتابخانه های اضافی خود را که استاندارد ندارد اضافه کنند.

توجه داشته باشید
در زیر بخش های اصلی استاندارد C++ 2014 آمده است، در دنیای قدرت، این بخش ها را منتقل می کنم و همچنین در صورت لزوم نظرات خود را ارائه می دهم. و سپس متن را با عنوان قسمت با پیام جایگزین کنید. همچنین لشکرها در حال ظاهر شدن هستند ...

قسمت های اصلی

فهرست جداول
لیست تصاویر

2. اصطلاحات واژگانی
3. مفاهیم اساسی
4. بازنگری های استاندارد
5. VIRAZI
6. اپراتورها
7. مبهوت
8. توصیف کنندگان
9. کلاسی
10. کلاس های VIROBNICHI
11. کنترل دسترسی به اعضا
12. اعضای عملکرد ویژه
13. REVANTAGE
14. الگوها
15. OBROBKA VIKLUCHEN
16. دستورالعمل های پیش پردازشگر
17. کتابخانه ها: نماهای پس زمینه
18. MOVIE TRIM LIBRARY
19. کتابخانه تشخیصی
20. کتابخانه خدمات عمومی
21. ردیف کتابخانه
22. کتابخانه محلی سازی
23. کتابخانه ظروف
24. كتابخانه تكرارگران
25. کتابخانه الگوریتم ها
26. کتابخانه اعداد
27. مقدمه-کتابخانه VISNOVKU
28. کتابخانه ویروس های منظم
29. کتابخانه عملیات اتمی
30. کتابخانه جریان
ضمیمه A. گرامر: PIDBAGS
ضمیمه B. اندازه فایل بصری
مکمل ج. ویژگی های برتری
ضمیمه E. نامهای جهانی برای نمادهای شناسه
ضمیمه F. RECHRIST POSILANNYA
فهرست مطالب
فهرست محصولات دستور زبان
فهرست نام کتابخانه
شاخص اجرای رفتار

این زبان توسط دنیس ریچی و برایان کرنیگان از سال 1969 تا 1973 توسعه یافت. با هدف اجرای چارچوب عملیاتی یونیکس، به منظور اجتناب از نیاز به رکود بیشتر.

در حال حاضر سی مکان پایدارتری را اشغال می کند.

چه چیزی نیاز دارید؟

ما قبلاً در مورد اهمیت زبان صحبت می کنیم، بنابراین اجازه دهید به نکات اصلی بپردازیم.

این به این دلیل است که اکثر نرم افزارهای سیستم به زبان C نوشته شده اند. هسته سیستم عامل لینوکس منبع باز محبوب به زبان C نوشته شده است.

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

Varto همچنین به این معنی است که محبوب ترین برنامه نویسی در این راه و روش های دیگر مربوط به C است. بنابراین، به عنوان مثال، جاوا و سی شارپ را سینتکس شبیه به C، و C++ و Objective-C را پسوندهای C نیز می نامند.

اگر کدی بنویسید که برنامه نویسی پویا باشد، چه PHP، چه جاوا اسکریپت یا پایتون، مفسر آن، قسمت میانی کتابخانه و اکثر کتابخانه ها عمدتاً به زبان C نوشته می شوند. با این حال، برای درک ویژگی‌های رفتار این زبان و سایر زبان‌ها، لازم است ویژگی‌های زبان S. و اگر از محدودیت های برنامه نویسی زبان خود فراتر رفته اید، وقتی شروع به نوشتن یک پسوند جدید در C می کنید، نمی توانید به اطراف نگاه کنید.

علاوه بر این، دانش C به برنامه اجازه می دهد تا به درستی تمام اجزای برنامه نویسی سطح بالا و همچنین تعاملاتی را که هنگام خراب شدن آنها ایجاد می شود، ارزیابی کند.

I tse arguments na korist vyvchennya Si.

بعدش چی؟

اکنون که فهمیدیم به چه چیزی نیاز داریم، منطقی تر می شود که بپرسیم: "چگونه می توانیم این را یاد بگیریم؟"

کتاب “Mova Programming Si”

هیچ کس نمی تواند بیشتر در این مورد به شما بگوید، آنها خالقان برنامه نویسی ما هستند. بنابراین، کتاب «برنامه‌نویسی فیلم»، نوشته دنیس ریچی و برایان کرنیگان، برای هر کسی که می‌خواهد زندگی خود را با آن پیوند دهد، ضروری است.

دوره "دوره کامل برنامه نویس C - ساخت 7 پروژه هیجان انگیز"

این دوره جنبه های اساسی زبان و موارد دیگر را پوشش می دهد: برنامه نویسی گرافیکی، مدل های حافظه و موارد دیگر. در حین تکمیل دوره، 7 پروژه شگفت انگیز مانند سیستم مدیریت پایگاه داده و ویروس کامپیوتری قدرتمند خود را ایجاد خواهید کرد.

دوره پولی است، اما او قطعاً سکه هایش را می دزدد. موارد زیر مواد کاملاً غیر آلوده هستند.

دوره معروف هاروارد "CS50"

حالا مال من است بیایید قبل از CS50 فکر کنید. موضوعاتی که در طول دوره به آنها می پردازید عبارتند از: انتزاع، الگوریتم ها، ساختارهای داده، کپسوله سازی، مدیریت منابع، امنیت، توسعه نرم افزار و توسعه وب. فیلم هایی که در مورد آنها پیروز خواهید شد: C، Python، SQL و JavaScript همراه با HTML و CSS. و مهم است که دوره رایگان است.

دوره آموزشی C بدون گربه برای مبتدیان

با این برنامه اصول زبان را یاد می گیرید، شاخص ها، ساختارها و ارتباطات را درک می کنید و همچنین نحوه نوشتن برنامه های ساده را یاد می گیرید.

دوره های آنلاین رایگان از دو دانشگاه برجسته فنلاند

شامل مواد پیچیده و برنامه نویسی کامل و همچنین یک سیستم تست خودکار است.

بالاتر از دوره Spylnovali، UNIVITET AALTO I UNIVITET GELSINKI (که خود توسط LINUS TORVALDS حذف شده است) و Matterіal در Nomo روشن می شود، دوبله نفرین ها برای si و vihida در zix UNIVITES است.

کتاب "راه سخت را بیاموزید"

این کتاب به شما می‌آموزد که چگونه در زندگی واقعی برای ایجاد پروژه‌های واقعی کار کنید، نه مکانیسم‌های انتزاعی و تئوری پدانتیک. همچنین تعدادی از موضوعات مهم مانند الگوریتم ها، ساختارهای داده و تست خودکار وجود دارد. همه می توانند این ترجمه روسی را بدانند. Tproger همچنین اغلب کتاب های برنامه نویسی خوب را توصیه می کند، بنابراین نگاهی به آن بیندازید

زبان برنامه نویسی C++(به عنوان "si plus plus" تلفظ می شود) - برنامه نویسی زبان چند پارادایم که برنامه نویسی شی گرا را تشویق می کند. Bjorn Stroustrup از آزمایشگاه Bell زبان برنامه نویسی C++ را که قدمت آن به دهه 1980 باز می گردد، با استفاده از Vikorist به عنوان پایه زبان برنامه نویسی C تجزیه کرده است. به دلیل محبوبیت زیاد C، برنامه نویسی C++ ما به محبوب ترین برنامه دهه 1990 تبدیل شد. برنامه نویسی برای لپه. و حتی در حال حاضر به طور گسترده ای در مکمل های تجاری و دوزی استفاده می شود. برنامه نویسی C++ جایگزین C در کاربردهای تجاری شده است، و به برنامه نویسان اجازه می دهد تا سیستم هایی را با پیچیدگی روزافزون بدون تکیه بر ریشه های C (مثلاً کتابخانه ها) که در S اولیه نوشته شده است، جدا کنند. نظم طراحی شی گرا، C++ امروزی، با تاکید بر برنامه نویسی رسمی و فرابرنامه نویسی الگو در حال تکامل است. این از طریق نام‌های مستعار نوع، پسوندهای سفارشی‌شده، قالب‌ها و نظرات در سبک نظر // پیاده‌سازی می‌شود (البته، با احترام، //-comment از آن زمان در C پذیرفته شده است). برنامه نویسی برای قوری

تاریخچه C++
Stroustrup کار بر روی معدن را در سال 1979 آغاز کرد و Simula67 را به عنوان پایه برنامه ایجاد کرد. AT&T اولین شرکتی بود که در سال 1983 از زبان استفاده کرد. کامپایلر اصلی Cfront نام داشت. اولین نسخه تجاری در سال 1985 ساخته شد. سازمان استانداردسازی C++ ISO / IEC 14882-1998 1998.

تاریخچه نام "C++"
این نام متعلق به Rick Mascitti Rick Mascitti (اواسط 1983) است و اولین بار در سال 1983 برنده شد. پیش از این، در دوره تحقیق و توسعه زبان، مرسوم بود که آن را "با کلاس ها" می نامیدند. نام باقیمانده مشابه عملگر "++" (که مقدار تغییر را یک بار افزایش می دهد) و نام رایج از طریق "+" برای نشان دادن قابلیت های توسعه یافته برنامه های کامپیوتری است، به عنوان مثال: "ویکی پدیا +". (به بیان ساده، علامت مثبت به این معنی است که برنامه به طور کامل توسعه یافته است و عملکرد جدیدی به آن اضافه شده است) به گفته استروستروپ: "این نام به معنای ماهیت تکاملی تغییر از C است." اگرچه اکثر کدهای C با C++ سازگار هستند، C به عنوان زیر مجموعه C++ کار نمی کند.
فعالیت های برنامه C رای به رای داده است x=3; ta y=x++; سپس با viconn x = 4 و y = 3. زیرا x پس از دادن مقدار به y افزایش می یابد. با این حال، می توانید y=++x را بنویسید. سپس y = 4 و x = 4.
پس از چنین سردرگمی، مناسب ترین نام برای C++ ممکن است در واقع ++C باشد. با این حال، C++ و ++C گسترده‌تر هستند، بنابراین شکل C++ از ++C گسترده‌تر است.
Pedants ممکن است به این معنی باشد که پس از معرفی C++، زبان C خود تغییر نکرده است و ممکن است نام صحیح C +1 باشد.

اقتدار در C++
هیچ کس C++ را دوست ندارد. Stroustrup و AT&T حق امتیاز را از ویکی C++ کسر نمی کنند.

برنامه "سلام ویکی پدیا!"
کد زیر را می توان در برنامه ای برای نمایش متن اعلان کامپایل کرد.

شامل // هدر برای std::cout نیاز است // شروع تابع main() int main(int argc, const char**argv) ( // ( ... ) برای گنجاندن بلوک های کد std:: کوت<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

قرار برای کلاس

شامل استفاده از std::string; کلاس InetMessage (رشته m_subject، m_to، m_from; public: InetMessage (رشته const & موضوع، رشته const & to، const string & from؛ رشته موضوع () const؛ رشته به () const؛ رشته از () const; );

کتابخانه های C++
کتابخانه‌های استاندارد C++ زیرمجموعه‌ای از کتابخانه‌های استاندارد C هستند. اکثر کتابخانه‌های C++ شامل کتابخانه استاندارد استاندارد (STL) هستند. STL ابزارهای مفیدی مانند تکرارکننده ها (که شاخص های سطح بالا را پیش بینی می کنند) و کانتینرها (که آرایه هایی را پیش بینی می کنند که می توانند به طور خودکار با افزودن عناصر جدید رشد کنند) ارائه می دهد. مانند C، امکان دسترسی به کتابخانه نیاز به استفاده از دستورالعمل #include اضافی برای گنجاندن فایل های هدر استاندارد دارد. C++ پنجاه هدر استاندارد قدیمی را ارائه می دهد.

فیلم Maybutnє
زبان برنامه نویسی C++ همچنان به تکامل خود ادامه می دهد تا مزایای رو به رشدی را در خود جای دهد. تا به حال، توسعه دهندگان کامپایلر و نرم افزار به تلاش برای حفظ تمام ویژگی های C++ (حدود سال 2004) ادامه دادند، وضعیت به طور قابل توجهی در دوره 1998 تا 2003 بهبود یافت. Zokrema، یک گروه از توسعه دهندگان Boost.org، سخت کار کرده است تا اطمینان حاصل کند که برنامه نویسی C++ ما همان چیزی است که امروز می دانیم و به کمیته استانداردسازی در مورد عملکردهایی که انجام می دهد و اینکه چگونه و نیاز به بهبود دارد، توصیه می کند. جریان کار نشان می دهد که C++ بیش از پیش به سمت ماهیت چند پارادایم خود حرکت می کند. به عنوان مثال، کاری که در Boost.org میزبانی می شود، قابلیت های برنامه نویسی و قابلیت های C++ را به طور قابل توجهی گسترش می دهد. C++ هنوز فاقد استانداردی برای نام‌گذاری توابع مهم است و در نتیجه کدهای بی‌معنی ایجاد می‌شود که توسط کامپایلرهای مختلف تولید می‌شود.

LYRICAL Intro.
در دانشکده علوم کامپیوتر چنین موضوعی وجود دارد: YaSiTP (زبان و نظریه برنامه نویسی). دانش آموزان در سال سوم او را مطالعه می کنند و قاعدتاً مشکل خاصی با او ندارند. و دانشجویان نگون بخت از همان آغاز برنامه آموزشی - از همان سال های اول حضورشان در دانشگاه - نگران هستند. همه چیز خوب خواهد بود - به عنوان یک دانش آموز در مدرسه که می خواهد کمی در مورد علوم کامپیوتر بیاموزد و به خوبی با پاسکال آشنا است - نحو را یاد بگیرید و سپس درگیر ریاضیات و گسستگی شوید. و چه کسی نخوانده و آگاه نیست؟ به همه گفتن چی؟
پس حق شما لوله \ آشغال \ کثیف است.
اول از همه: در سخنرانی های خلیبوبودوف نخوابید. به خاطر سپردن مهمتر نیست، بلکه هماهنگی با اندازه صدای خود در جفت چهارم، در غیر این صورت... همه چیز در مقابل شما قرار خواهد گرفت.
دوست: شروع به خواندن یک کتاب کنید، به عنوان مثال http://www.ph4s.ru/bookprogramir_1.html در آنجا کتاب بوگاتیروف "خلاقیت یک احمق کامل از برنامه نویسی" یا هر چیز دیگری را خواهید دید.
سومین و شاید مهم ترین: تمرین. من در مورد آنچه که من صحبت می کنم به شما می گویم.
اول از همه، من باید در خانه بنویسم، باید استودیو مناسبی را راه اندازی کنم. s dosvidu mayzhe vsogo mkn2012 set bachul studio 2010 s ++ express - غیر کاری. آنهایی که در دانشگاه کاملا روی کامپیوتر نوشته شده اند با رحمت و بدون امکان تصحیح خوانده می شوند. چرا در سمت راست مال ما نیست، ما فکر می کنیم Visual Studio 2010 (2012) Ultimate (Visual Studio Ultimate 2012). به عنوان مثال: http://www.microsoft.com/visualstudio/ru... . ما نسخه آزمایشی را نصب می کنیم، پس از آن می توانید تمرین را شروع کنید.

(یادداشت 1:
فایل - پارامترهای ذخیره اضافی - سند سیریلیک. سپس کنسول معمولاً با حروف روسی قابل خواندن است.

توجه 2: برای استخراج یک برنامه کامل از کد ارائه شده، باید یک پروژه جدید در ویژوال استودیو ایجاد کنید، مورد "پروژه خالی" را انتخاب کنید، نام پروژه را در پوشه "فایل های کد خروجی" وارد کنید. دکمه سمت راست ماوس را بزنید و عنصر جدید "فایل z" ++ را اضافه کنید، کد من را در پنجره ای که ایجاد شده است کپی کنید و آن را کامپایل کنید (کلیدهای کنترل + F5)، سپس سعی کنید چیزی مشابه به طور مستقل بنویسید.)

تمرین.
برنامه نویسی به طور کلاسیک با نوشتن یک برنامه ابتدایی "سلام، دنیا!" آغاز می شود.
در انجمن تعدادی موضوع در مورد این برنامه به زبان های مختلف از جمله C++ وجود دارد که این کد است:

#include "stdio.h" #include "conio.h" int main(int argc, char* argv) ( printf("Hello, World!\n"); )

خوب است که چند برنامه ساده از این نوع بنویسید (به عنوان مثال، برای نمایش نتیجه مقایسه با داده های شناخته شده قبلی):

// tytytyty.cpp: نقطه ورودی برنامه کنسول را تعریف می کند. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) (int x , y , z; x = 9; y = 4; z = x*y; printf("%d", z) ;)

سپس پیچیده تر است (این برنامه دو مقدار وارد شده را می خواند و با مقایسه مقادیر وارد شده نتیجه را می دهد):

#include "stdio.h" void main() (int x , y , z; scanf("%d, %d", &x, &y); z = x*y; printf("%d", z); )

برنامه در حال آمدن است، با پیام بعد از "سلام دنیا!"، برای من به این شکل بود:
Umova: یک مربع داده شده و در یک دایره جدید حک شده است. نیمی از مساحت مربع را که در پشت مرزهای چوب گم شده است، پیدا کنید، زیرا ضلع مربع قابل مشاهده خواهد بود.
تصمیم:

#include "stdio.h" #include "math.h" #define PI 3.1415926535897932384626433832795 void main() ( double x; printf ("ورود به سمت مربع x = "); scanf("%lf"، &x = x / 2 ؛ double f = x * x؛ double z = PI * y * y؛ double s = (f - z) / 2؛ printf("%lf\n"، s);

به عنوان یک گزینه با کتابخانه ثابت ویکی:

#define _USE_MATH_DEFINES #include "stdio.h" #include "math.h" void main() ( double x; printf("x = "); scanf("%lf"، &x); double y = x / 2; double f = x * x؛ double z = M_PI * y * y؛ double s = (f - z) / 2؛ printf("%lf\n"، s);

برنامه شماره پنج از وظیفه دو. Umova: معادله مربع را با ضرایبی که خواسته شده است باز کنید.
پیاده سازی:

#include "stdio.h" #include "math.h" #include "conio.h" int main() ( float x , x1, sq, a, b, c; printf("Vvedite znachenija a, b, c: "); scanf("%f، %f، %f"، &a، &b، و c); if (a == 0) (x = - c / b; printf("%f، x); ) other (شناور k؛ k = b * b - 4 * a * c؛ اگر (k< 0) { printf("Kornei net!"); } else if (k == 0) { x = - b / (2 * a); printf("%f", x); } else { sq = sqrt(k); x = (-b + sq) / (2 * a); x1 = (-b - sq) / (2 * a); printf("%f, %f", x, x1); } } getch(); return 0; }

(UVAGA!! هنگام مشخص کردن کتابخانه‌ها، علائم بیشتر/کمتر را در پای نشان‌داده‌شده جایگزین کنید)

PISLYAMOVA: اطلاعات بیشتر بعدا اضافه خواهد شد.