C plus plus тіл стандарты. C плюс тілі стандартты C плюс бағдарламалау тілі

Кітап C++ бағдарламалау тіліне кіріспе болып табылады. Бұл кітаптың C++ for Dummies-тің алдыңғы басылымдарынан басты айырмашылығы - бұл басылым оқырманнан ешқандай қосымша білімді талап етпейді, ал алдыңғы басылымдар материалды көрсетудің қарапайымдылығына қарамастан, оқырманның Си бағдарламалау тілін білуіне негізделген , ол кітапта өте қатаң түрде берілген, сондықтан осы кітаптың көмегімен C++ тілінде бағдарламалау негіздерін зерттегеннен кейін оқырман енді қиындықтарға тап болмайды.
әрі қарай тіл үйрену кезінде.
Бұл кітап Windows жүйесіне бағдарламалауды немесе тінтуірді екі рет басу арқылы әдемі интерфейсті жасауды үйретпейді; ондағы материал белгілі бір компиляторға немесе операциялық жүйеге байланысты емес. Бұл кәсіпқой бағдарламашыға пайдалы болуы екіталай, бірақ егер сіздің мақсатыңыз бағдарламалау тілін терең білу болса және неден бастарыңызды білмесеңіз, бұл кітап сізге арналған.

C++ дегеніміз не.
C++ – ANSI және Халықаралық стандарттар ұйымының (ISO) стандарттарына сәйкес келетін объектіге бағытталған төмен деңгейлі бағдарламалау тілі. Объектіге бағытталған C++ оның ауқымды бағдарламаларды оңай кодтауға және кеңейтуге мүмкіндік беретін бағдарламалау стилін қолдайтынын білдіреді. Төмен деңгейлі тіл болғандықтан, C++ өте тиімді, жоғары жылдамдықты бағдарламаларды жасай алады.

Объектіге бағытталған бағдарламалау тілі ретінде C++ өте икемді және кеңейеді, бұл оны ауқымды жобалар үшін қолайлы етеді. Қазіргі уақытта C++ кез келген типтегі қосымшаларды әзірлеуге арналған ең танымал бағдарламалау тілдерінің бірі болып табылады. Дербес компьютерлерде жұмыс істейтін қазіргі заманғы бағдарламалардың көпшілігі C++ тілінде жазылған.

МАЗМҰНЫ
МАЗМҰНЫ 6
Кіріспе 17
1-бөлім. C++ 23 тілімен алғашқы танысу
1-тарау: Алғашқы бағдарламаңызды жазу 25
2-тарау. Айнымалыларды жариялау даналығы 41
3-тарау: 50 математиканы орындау
4-тарау: Логикалық операцияларды орындау 55
5-тарау. Бағдарламаны басқару операторлары 66
2-бөлім. Функционалды бағдарламашылар болу 79
6-тарау: Функцияларды жасау 81
7-тарау. Жиымдардағы реттерді сақтау 92
8-тарау. C++ 105 тіліндегі көрсеткіштермен жұмысты бастау
9-тарау Көрсеткіштермен екінші танысу 117
10-тарау. C++ бағдарламаларын жөндеу 128
3-бөлім: 143-сыныптарға кіріспе
11-тарау: Объектіге бағытталған бағдарламалауға кіріспе 145
12-тарау. C++ тіліндегі сыныптар 149
13-тарау. Сыныптармен жұмыс 154
14-тарау. Объектілерге көрсеткіштер 167
15-тарау. Қорғалған сынып мүшелері: Мазаламаңыз! 181
16-тарау. Объектілерді құру және жою 188
17-тарау. Дизайндың аргументі 198
18-тарау. Көшіру конструкторы 213
19-тарау. Статикалық мүшелер 224
4-бөлім. Мұрагерлік 231
20-тарау. Сыныптық мұрагерлік 233
21-тарау: Виртуалды мүше функцияларын енгізу: олар нақты ма 240
22-тарау. Сыныптың ыдырауы 249
5-бөлім. Пайдалы мүмкіндіктер 269
23-тарау. Тағайындау операторы 271
24-тарау: енгізу/шығару ағындарын пайдалану 277
25-тарау: Қателер мен ерекшеліктерді өңдеу 290
Көп мұрагерлік 298-тарау
27-тарау. C++ үлгілері 308
28-тарау. Стандартты үлгілер кітапханасы 317
6-бөлім. Керемет ондық 329
29-тарау Қателіктерді болдырмаудың он жолы 331
30-тарау. Dev-C++ 336 бағдарламасының негізгі он мүмкіндігі
31-тарау. БЮДЖЕТ 343 Бағдарлама
Қолдану. Берілген CD 379 мазмұны
Пиктограммалар
Пәндік көрсеткіш 380.


Электронды кітапты ыңғайлы форматта тегін жүктеп алыңыз, қараңыз және оқыңыз:
C++ for Dummies, Stefan Randy Davis кітабын жүктеп алыңыз - fileskachat.com, жылдам және тегін жүктеп алыңыз.

Си тілін 1969-1973 жылдар аралығында Деннис Ричи мен Брайан Керниган жасаған. Си тілі UNIX операциялық желісін жүзеге асыруға арналған, бірақ кейінірек ол кеңірек қолданбаларды тапты.

Қазіргі уақытта Си тұрақты екінші орында тұр.

Сізге C не үшін қажет?

Біз Си тілінің маңыздылығы туралы жоғарыда айттық, сондықтан негізгі ойларға тоқталайық.

Алдымен, жүйелік бағдарламалық жасақтаманың көпшілігі Си тілінде жазылған. Ең танымал ашық бастапқы Linux ОЖ ядросы С тілінде жазылған.

Си тілінің үлкен артықшылығы - тілдің әрбір нұсқауы машиналық кодқа тікелей және түсінікті түрде аударылады. Дәл бағдарламашы экранда көретін код орындалады. Дегенмен, қазіргі заманғы компиляторларда, әрине, оларды қолдануға болады, бірақ аз жағдайларда.

Сондай-ақ, ең танымал бағдарламалау тілдері қандай да бір түрде Си тіліне қатысты екенін атап өткен жөн. Мәселен, мысалы, Java және C# тілінде C-тәрізді синтаксис бар, ал C++ және Objective-C қандай да бір түрде C кеңейтімдері болып табылады.

Егер сіз кез келген динамикалық бағдарламалау тілінде код жазсаңыз, мейлі ол PHP, JavaScript немесе Python болсын, оның интерпретаторы, орындалу уақыты және кітапханалардың көпшілігі негізінен C тілінде жазылады. Сондықтан белгілі бір тілдің мінез-құлық ерекшеліктерін түсіну үшін Си тілінің ерекшеліктерін білу керек. Ал егер сіз өзіңіздің бағдарламалау тіліңіздің мүмкіндіктерінен асып кеткен болсаңыз, оны білмей тұрып, сіз Си тілінде жаңа кеңейтімді жаза бастайсыз.

Сонымен қатар, Си тілін білу бағдарламашыға жоғары деңгейлі бағдарламалау тілдерінің барлық ләззаттарын, сондай-ақ оларды пайдалану кезінде туындайтын шектеулерді шынымен бағалауға мүмкіндік береді.

Және бұл C-ді үйренудің себептері.

Ары қарай не?

Енді біз Си тілінің не үшін қажет екенін түсінгеннен кейін, логикалық сұрақ туындайды: «Оны қалай үйренуге болады?»

«С бағдарламалау тілі» кітабы

Сізге Си тілі туралы осы бағдарламалау тілін жасаушылардан артық ешкім айта алмайды. Сондықтан Деннис Ричи мен Брайан Керниган жазған «С бағдарламалау тілі» кітабы өз өмірін С тілімен байланыстыруды шешкен әрбір адам үшін міндетті болып табылады.

«Толық C әзірлеуші ​​курсы - 7 қызықты жобаны құрастыру» курсы

Курс тілдің негізгі аспектілерін де, неғұрлым жетілдірілген аспектілерін де қамтиды: графикалық бағдарламалау, жад үлгілері және т.б. Курс барысында сіз дерекқорды басқару жүйесі және жеке компьютерлік вирус сияқты 7 қызықты жоба жасайсыз.

Курс ақылы, бірақ бұл ақшаға тұрарлық. Әрі қарай біз тегін материалдарды ұсынамыз.

Танымал Гарвард курсы «CS50»

Қазір ол сөйлеп жатыр. Ең бастысы, CS50 сізге қалай ойлау керектігін үйретеді. Курс барысында сіз қарастыратын тақырыптардың кейбірі абстракция, алгоритмдер, деректер құрылымдары, инкапсуляция, ресурстарды басқару, қауіпсіздік, бағдарламалық жасақтаманы әзірлеу және веб-әзірлеу болып табылады. Сіз қолданатын тілдер HTML және CSS-пен бірге C, Python, SQL және JavaScript болып табылады. Ең бастысы, курс тегін.

«Жаңадан бастаушыларға арналған C оқулығы» тегін курсы

Бұл бағдарлама арқылы сіз Си тілінің негіздерін үйренесіз, көрсеткіштерді, құрылымдарды және одақтарды түсінесіз және қарапайым бағдарламаларды жазуды үйренесіз.

Финнің жетекші екі университетінен тегін онлайн C курстары

Кешенді материалдар мен көптеген бағдарламалау жаттығуларын, сондай-ақ автоматтандырылған тестілеу жүйесін қамтиды.

Курсты Аальто университеті мен Хельсинки университеті (бір кездері Линус Торвальдс оқыған университет) бірлесіп әзірледі және ондағы түсіндірілген материал осы университеттерде оқытылатын С курстарын толығымен қайталайды.

«С қиын жолмен үйрен» кітабы

Кітап сізге дерексіз механизмдер мен педантикалық теорияны емес, нақты жобаларды жасау үшін нақты өмірде қолданылатын С тілін үйретеді. Сіз сондай-ақ алгоритмдер мен деректер құрылымдары және автоматтандырылған тестілеу сияқты бірнеше маңызды тақырыптарды үйренесіз. Қызығушылық танытқандар оның орыс тіліне аудармасын таба алады. Tproger сонымен қатар жақсы бағдарламалау кітаптарын жиі ұсынады, сондықтан тексеріңіз

Си программалау тілінің танымалдылығын асыра бағалау қиын, әсіресе оның бұрынғы жетістіктерін еске түсіру. Мүмкін, әрбір әзірлеуші, кем дегенде, оның бар екенін біледі және, ең көбі, оны бағдарламалауға тырысты. C - C++, Objective-C, C#, Java сияқты тілдердің ізашары.

Microsoft корпорациясы өзінің .Net платформасы үшін ана тілін дамыту үшін C-тәрізді синтаксисті таңдады. Сонымен қатар, көптеген операциялық жүйелер C тілінде жазылған.

Әрине, Си мінсіз емес: тілді жасаушылар Кен Томпсон мен Деннис Ричи оны нақтылау үшін ұзақ уақыт жұмсады. С стандарттау әлі де жалғасуда. Ол 45 жылдан астам уақыт бойы жұмыс істейді және белсенді түрде қолданылады.

Ол көбінесе бір емес, екі бағдарламалау тілімен байланысты - C/C++. Дегенмен, төменде біз «таза» С туралы нақты айтатын боламыз.

Си тілінің тамыры ALGOL (ALGorithmic Language) тілінен бастау алады, оны 1958 жылы ETH Zurich-те өткен кездесуде еуропалық және американдық компьютер ғалымдарының комитеті құрған. Тіл ФОРТРАН тілінің кейбір кемшіліктеріне жауап болып, оларды түзету әрекеті болды. Сонымен қатар, Си тілінің дамуы UNIX операциялық жүйесін құрумен тығыз байланысты, онымен де Кен Томпсон мен Деннис Ричи жұмыс істеді.

UNIX

MAC (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) жобасы 1963 жылы MIT-те таза зерттеу жобасы ретінде басталды.

MAC жобасының бөлігі ретінде CTSS (Compatible Time-Sharing System) операциялық жүйесі әзірленді. 60-жылдардың екінші жартысында BBN, DTSS, JOSS, SDC және Multiplexed Information and Computing Service (MULTICS) сияқты басқа да уақытты бөлісу жүйелері құрылды.

Multics – MIT, Bell Telephone Laboratories (BTL) және General Electric (GE) арасындағы GE-645 компьютері үшін уақытты бөлісетін операциялық жүйені құру бойынша бірлескен күш. Multics жұмыс істейтін соңғы компьютер 2000 жылы 31 қазанда жабылды.

Алайда BTL 1969 жылдың басында бұл жобадан бас тартты.

Оның кейбір қызметкерлері (Кен Томпсон, Деннис Ричи, Сту Фельдман, Даг Макилрой, Боб Моррис, Джо Оссанна) жұмысты өз бетінше жалғастырғысы келді. Томпсон GE-635-те ғарыштық саяхат ойынында жұмыс істеді. Ол алдымен Multics үшін жазылды, содан кейін GE-635 құрылғысында GECOS астында Фортранда қайта жазылды. Ойын күн жүйесінің денелерін имитациялады және ойыншы кемені планетаның немесе спутниктің бір жеріне қондыру керек болды.

Бұл компьютердің бағдарламалық жасақтамасы да, аппараттық құралдары да мұндай ойынға сәйкес келмеді. Томпсон балама іздеді және ойынды тастап кеткен PDP-7 үшін қайта жазды. Жад 8K 18 биттік сөздер болды, сонымен қатар сол уақытта әдемі графиканы көрсету үшін векторлық дисплей процессоры болды.


Сурет slideshare.net сайтынан

Томпсон мен Ричи GE-де кросс-ассемблердегі барлық әзірлемелерді жасады және кодты перфоленталарға жіберді. Томпсон бұл белсенді түрде ұнамады және файлдық жүйеден бастап PDP-7 үшін ОЖ жаза бастады. UNIX осылай дүниеге келді.

Томпсон қол жетімді кез келген құралдарды пайдалана отырып, оның дизайнына сәйкес жасалған ыңғайлы есептеу ортасын жасағысы келді. Оның идеялары, әрине, ретроспективада, Multics компаниясының көптеген инновацияларын, соның ішінде басқарудың негізі ретіндегі процесс тұжырымдамасын, ағашқа негізделген файлдық жүйені, пайдаланушы бағдарламасы ретінде командалық интерпретаторды, мәтіндік файлдарды оңайлатылған ұсынуды және жалпылама қолжетімділікті қамтиды. құрылғылар.

PDP-7 UNIX сонымен қатар BCPL тілінің әсерінен жоғары деңгейлі В тілінің бастауын белгіледі. Деннис Ричи В түрі жоқ С екенін айтты. BCPL 8 КБ жадқа сыйды және Томпсон мұқият қайта құрастырған. В бірте-бірте С-да өсті.


Сурет it-world.com сайтынан алынды

1973 жылға қарай Си тілі жеткілікті күшті болды, бастапқыда PDP-11/20 ассемблер тілінде жазылған UNIX ядросының көп бөлігі Си тілінде қайта жазылды. Бұл ассемблер тілінен басқа тілде жазылған алғашқы операциялық жүйе ядроларының бірі болды.

Си UNIX операциялық жүйесін құру кезінде алынған «байланысты өнім» екені белгілі болды.

Сидің ата-бабалары

ALGOL-60 тілінен шабыттана отырып, Кембридж университетінің математика зертханасы Лондон университетінің компьютерлік бөлімімен бірлесіп, 1963 жылы CPL (Combined Programming Language) тілін жасады.

CPL тілі қиын деп саналды және оған жауап ретінде Мартин Ричардсон 1966 жылы BCPL тілін құрды, оның негізгі мақсаты компиляторларды жазу болды. Қазіргі уақытта ол іс жүзінде қолданылмайды, бірақ бір кездері ол жақсы тасымалдануының арқасында маңызды рөл атқарды.

BCPL 1970 жылдардың басында бірнеше қызықты жобаларда, соның ішінде OS6 операциялық жүйесінде және ішінара Xerox PARC жаңа әзірлемелерінде қолданылды.

BCPL 1969 жылы бұрыннан таныс AT&T Bell телефон зертханаларында әзірленген, Кен Томпсон мен Деннис Ричиге кем таныс емес би (В) тілінің атасы ретінде қызмет етті.

Сол кездегі басқа операциялық жүйелер сияқты UNIX де ассемблер тілінде жазылған. Ассемблерде бағдарламаларды жөндеу - бұл нағыз азап. Томпсон ОЖ-ны одан әрі дамыту үшін жоғары деңгейлі тіл қажет деп шешті және шағын тілді ойлап тапты Б.Томпсон BCPL тілін негізге алды. В тілін түрі жоқ С ретінде қарастыруға болады.

BCPL, B және C көптеген мәліметтер бойынша синтаксистік жағынан ерекшеленеді, бірақ олар негізінен ұқсас. Бағдарламалар жаһандық декларациялар тізбегінен және функция (процедура) декларацияларынан тұрады. BCPL-де процедураларды кірістіруге болады, бірақ оларды қамтитын процедураларда анықталған статикалық емес нысандарға сілтеме жасай алмайды. B және C қатаңырақ шектеуді енгізу арқылы бұл шектеуді болдырмайды: кірістірілген процедуралар мүлде жоқ. Тілдердің әрқайсысы (В ең көне нұсқаларынан басқа) бөлек компиляцияны қолдайды және аталған файлдардан мәтінді қосуға мүмкіндік береді.

В құру кезінде орын алған кең тараған синтаксистік өзгерістерден айырмашылығы, BCPL негізгі семантикасы — оның түр құрылымы мен өрнекті бағалау ережелері — өзгеріссіз қалды. Екі тіл де типсіз, дәлірек айтсақ, олардың бір деректер түрі бар - «сөз» немесе «ұяшық», бекітілген ұзындықтағы биттердің жиынтығы. Бұл тілдердегі жад осындай ұяшықтардың жиыны болып табылады және ұяшық мазмұнының мағынасы оған қолданылатын операцияға байланысты. Мысалы, «+» операторы машинаны қосу командасының көмегімен өзінің операндтарын жай ғана қосады, ал басқа арифметикалық амалдар да олардың операндтарының мағынасына немқұрайлы қарайды.

BCPL, B және C тілдерінде таңба деректерін бөлмейді; олар жолдарды бүтін сандардың векторлары ретінде қарастырады және жалпы ережелерді бірнеше конвенциялармен толықтырады. BCPL және B екеуінде де жол литералы ұяшықтарға оралған жол таңбаларымен инициализацияланған статикалық аймақтың мекенжайын білдіреді.

C қалай құрылды

1970 жылы Bell Labs жоба үшін PDP-11 компьютерін сатып алды. B PDP-11-де жұмыс істеуге дайын болғандықтан, Томпсон В-де UNIX бөлігін қайта жазды.

Бірақ B және BCPL моделі көрсеткіштермен жұмыс істеу кезінде үстеме шығындарды білдіреді: тілдің ережелері, көрсеткішті сөздер массивіндегі индекс ретінде анықтай отырып, көрсеткіштерді сөздердің индекстеріне айналдырды. Орындау кезінде әрбір көрсеткішке қол жеткізу процессор күткен байт мекенжайына көрсеткіштің масштабтауын жасады.

Сондықтан таңбалар мен байттардың адресациясын жеңу үшін, сондай-ақ өзгермелі нүктелерді есептеу үшін алдағы аппараттық қолдауға дайындалу үшін теру қажет екені белгілі болды.

1971 жылы Ричи В-ның кеңейтілген нұсқасын жасай бастады. Алдымен ол оны NB (Жаңа В) деп атады, бірақ тіл В тілінен мүлде басқаша болғанда, атау C болып өзгертілді. Ричидің өзі бұл туралы былай деп жазды:

Мен құрылымның дерексіз нысанды сипаттап қана қоймай, сонымен қатар каталогтан оқуға болатын биттердің жиынын сипаттауын қаладым. Компилятор семантика талап ететін атау үшін көрсеткішті қайда жасыра алады? Тіпті егер құрылымдар абстрактілі болуы және көрсеткіштерге арналған кеңістік бір жерде жасырылуы мүмкін болса да, күрделі нысан үшін жадты бөлу кезінде сол көрсеткіштерді дұрыс инициализациялаудың техникалық мәселесін қалай шешер едім, мүмкін құрылымдары бар массивтерді қамтитын құрылым және т.б. ерікті тереңдікке?

Шешім типсіз BCPL мен терілген C арасындағы эволюциялық тізбектегі шешуші секіріс болды. Ол көрсеткіштің қоймаға материалдануын жойды және оның орнына өрнекте массив атауы айтылған кезде оның жасалуына себеп болды. Бүгінгі C тілінде жалғасатын ереже - өрнекте сілтеме жасалған жиым мәндері сол массивті құрайтын нысандардың біріншісіне көрсеткішке түрлендіріледі.

Си-ді алдыңғылардан айқын ажырататын екінші жаңалық - бұл неғұрлым толық типтік құрылым және әсіресе оның декларация синтаксисіндегі экспрессивтілігі. NB int және char негізгі түрлерін, олардың массивтерін және оларға көрсеткіштерді ұсынды, бірақ оларды құрудың басқа жолы жоқ.

Жалпылау қажет болды: кез келген типтегі объект үшін бірнеше осындай объектілерді массивке біріктіретін, оны функциядан қабылдайтын немесе оған көрсеткіш болып табылатын жаңа нысанды сипаттау мүмкін болуы керек.



Си тілінен алынған сурет: М.Уэйт, С.Прата, Д.Мартин

Мұндай құрама түрдегі кез келген нысан үшін оның бөлігі болып табылатын нысанды көрсетудің жолы болды: массивті индекстеу, функцияны шақыру, көрсеткішпен жанама операторды пайдалану. Ұқсас пайымдаулар сол атаулар қолданылатын өрнектің синтаксисін көрсететін атауларды жариялауға арналған синтаксиске әкелді. Сонымен

бүтін санды, көрсеткішті бүтін санға және көрсеткішті бүтін санға жариялайды. Бұл мәлімдемелердің синтаксисі i, *pi және **ppi мәндерінің барлығы өрнекте пайдаланылғанда int түріне әкелетінін көрсетеді. Ұқсас жолмен
бүтін санды қайтаратын функцияны, көрсеткішті бүтін санға қайтаратын функцияны, бүтін санды қайтаратын функцияны жариялау;
көрсеткіштер массивін бүтін санға, көрсеткішті бүтін сандар массивіне жариялау.

Осы жағдайлардың барлығында айнымалыны жариялау оның түрі мәлімдеменің басында қандай болса да болатын өрнекте қолданылуына ұқсайды.

70-ші жылдар: «қиындық уақыты» және жалған диалектілер

1973 жылға қарай тіл UNIX-ті қайта жазу үшін жеткілікті тұрақты болды. Си тіліне ауысу маңызды артықшылықты қамтамасыз етті: портативтілік. Bell Labs-те әрбір машина үшін C компиляторын жазу арқылы әзірлеу тобы оларға UNIX портын қоса алады.

Си тілінің пайда болуына қатысты Питер Мойлан өзінің «С-ға қарсы іс» кітабында былай деп жазады: «Керек болған нәрсе - жоғары деңгейлі тілдердің көпшілігінде енгізілген кейбір қатаң ережелерді айналып өтіп, олардың сақталуын қамтамасыз ететін тіл болды. сенімділік. Бізге бұрын тек ассемблер тілінде немесе машина коды деңгейінде жасауға болатын нәрсені жасауға мүмкіндік беретін тіл қажет болды ».

C 70-ші жылдары дамуын жалғастырды. 1973–1980 жылдары тіл аздап өсті: типтік құрылым қолтаңбасыз, ұзын типтер, біріктіру және санау алды, құрылымдар класстық объектілерге жақындады (тек литеральдардың белгісі жоқ).

C туралы алғашқы кітап. Брайан Керниган мен Деннис Ричи жазған және 1978 жылы жарияланған C бағдарламалау тілі C бағдарламашыларының Киелі кітабына айналды. Ресми стандарт болмағандықтан, бұл кітап - K&R деп те аталады немесе C жанкүйерлері оны атайтын "Ақ кітап" - іс жүзінде стандартқа айналды.


Сурет Learnc.info сайтынан

70-ші жылдары C бағдарламашылар аз болды және олардың көпшілігі UNIX пайдаланушылары болды. Дегенмен, 80-жылдары C UNIX әлемінің тар шеңберінен шығып кетті. C компиляторлары әртүрлі операциялық жүйелермен жұмыс істейтін әртүрлі машиналарда қол жетімді болды. Атап айтқанда, Си тез дамып келе жатқан IBM PC платформасында тарала бастады.

K&R келесі тіл мүмкіндіктерін енгізді:

Құрылымдар (деректер типінің құрылымы);
ұзын бүтін сан (ұзын int деректер түрі);
unsigned integer (мәліметтер түрі unsigned int);
оператор += және соған ұқсас (ескі операторлар =+ C компиляторының лексикалық анализаторын шатастырды, мысалы, i =+ 10 және i = +10 өрнектерін салыстыру кезінде).

K&R C көбінесе C компиляторы қолдауы керек тілдің ең маңызды бөлігі болып саналады. Көптеген жылдар бойы, тіпті ANSI C шығарылғаннан кейін де, бағдарламаларының максималды тасымалдануын қалайтын бағдарламашылар ұстануға тиіс ең төменгі деңгей болып саналды, өйткені ол кезде барлық компиляторлар ANSI C тілін қолдамайды, ал жақсы K&R C коды ANSI C үшін дұрыс болды. .

Танымалдылықтың өсуімен қатар проблемалар туындады. Жаңа компиляторларды жазған бағдарламашылар K&R-де сипатталған тілді негізге алды. Өкінішке орай, K&R-де тілдің кейбір ерекшеліктері анық емес сипатталған, сондықтан компиляторлар жиі оларды өз қалауы бойынша түсіндіреді. Сонымен қатар, кітапта тілдің ерекшелігі неде және UNIX операциялық жүйесінің ерекшелігі неде екенін нақты ажыратпаған.

K&R C жарияланғаннан бері тілге AT&T және кейбір басқа өндірушілердің компиляторлары қолдау көрсететін бірнеше мүмкіндіктер қосылды:

Мәнді қайтармайтын функциялар (void түрі) және түрі жоқ көрсеткіштер (void * түрі);
одақтар мен құрылымдарды қайтаратын функциялар;
әрбір құрылым үшін әртүрлі аттар кеңістігіндегі осы құрылымдардың өрістерінің атаулары;
құрылымдық тапсырмалар;
тұрақты спецификатор (const);
әртүрлі өндірушілер енгізген функциялардың көпшілігін жүзеге асыратын стандартты кітапхана;
enum түрі (enum);
бір дәлдік бөлшек сан (флоат).

Жағдайды қиындатқаны, K&R жарияланғаннан кейін C дамуын жалғастырды: оған жаңа мүмкіндіктер қосылды және одан ескілері жойылды. Көп ұзамай тілді жан-жақты, дәл және заманауи сипаттаудың қажеттілігі айқын болды. Мұндай стандарт болмаса, тілдің ең үлкен күші - портативтілікке кедергі келтіретін тілдің диалектілері пайда бола бастады.

Стандарттар

1970 жылдардың аяғында Си тілі сол кезде микрокомпьютерлік бағдарламалауда көшбасшы болған BASIC тілін алмастыра бастады. 1980 жылдары ол IBM-PC архитектурасына бейімделді, бұл оның танымалдығының айтарлықтай секіруіне әкелді.

Американдық ұлттық стандарттар институты (ANSI) Си тілінің стандартын әзірлеуді бастады. Оның астында 1983 жылы стандартты әзірлеуді бастаған X3J11 комитеті құрылды. Стандарттың бірінші нұсқасы 1989 жылы шығарылды және ол C89 деп аталды. 1990 жылы стандартқа аздаған өзгерістер енгізілгеннен кейін оны Халықаралық стандарттау ұйымы ИСО қабылдады. Содан кейін ол ISO/IEC 9899:1990 коды бойынша белгілі болды, бірақ бағдарламашылар арасында стандарт қабылданған жылмен байланысты атау қалды: C90. Стандарттың соңғы нұсқасы ISO/IEC 9899:1999 болып табылады, ол 2000 жылы қабылданған C99 ретінде де белгілі.

C99 стандартының инновацияларының ішінде айнымалы мәндерді жариялау орнына қатысты ереженің өзгеруіне назар аударған жөн. Енді жаңа айнымалылар тек құрама блоктың басында немесе жаһандық ауқымда емес, кодтың ортасында жариялануы мүмкін.

C99 кейбір мүмкіндіктері:

Inline функциялары (inline);
кез келген бағдарлама мәтіндік операторында жергілікті айнымалыларды жариялау (С++ тіліндегідей);
long long int (32-ден 64-биттік сандарға өтуді жеңілдету үшін), анық логикалық деректер түрі _Bool және күрделі сандарды көрсету үшін күрделі тип сияқты жаңа деректер түрлері;
айнымалы ұзындық массивтері;
шектелген көрсеткіштерді қолдау (шектеу);
құрылымдардың атаулы инициализациясы: struct ( int x, y, z; ) point = ( .y=10, .z=20, .x=30 );
// арқылы басталатын бір жолды түсініктемелерді қолдау, C++ тілінен алынған (көптеген C компиляторлары оларды бұрын қосымша ретінде қолдаған);
snprintf сияқты бірнеше жаңа кітапхана функциялары;
stdint.h сияқты бірнеше жаңа тақырып файлдары.

C99 стандартын қазір барлық заманауи C компиляторлары азды-көпті қолдайды. Ең дұрысы, стандарттарға сәйкес және аппараттық және жүйеге тәуелді қоңырауларды пайдаланбай C тілінде жазылған код аппараттық және платформаға тәуелсіз код болды.

2007 жылы Си тілінің келесі стандарты бойынша жұмыс басталды. 2011 жылдың 8 желтоқсанында Си тілінің жаңа стандарты жарияланды (ISO/IEC 9899:2011). Жаңа стандарттың кейбір мүмкіндіктеріне GCC және Clang компиляторлары қазірдің өзінде қолдау көрсетеді.

C11 негізгі мүмкіндіктері:

Көп ағынды қолдау;
жақсартылған Юникод қолдауы;
жалпыланған макростар (типтік өрнектер, статикалық шамадан тыс жүктеуге мүмкіндік береді);
анонимді құрылымдар мен бірлестіктер (ішкі құрылымдарға қол жеткізуді жеңілдету);
объектіні туралауды басқару;
статикалық бекітулер;
қауіпті gets функциясын алып тастау (seyf gets_s пайдасына);
жылдам_шығу функциясы;
функция спецификаторы _Noreturn;
жаңа эксклюзивті файлды ашу режимі.

'11 стандартының болуына қарамастан, көптеген компиляторлар әлі де C99 нұсқаларын толық қолдамайды.

Си неге сынға ұшырайды?

Оның кіруге айтарлықтай жоғары кедергісі бар, бұл бірінші бағдарламалау тілі ретінде оқытуда пайдалануды қиындатады. Си тілінде бағдарламалау кезінде көптеген мәліметтерді ескеру қажет. «Хакерлердің ортасынан туған ол көбінесе қауіпті бағдарламалау стилін ынталандырады және шиеленіскен кодты жазуды ынталандырады», - деп жазады Wikipedia.

Питер Мойлан тереңірек және дәлелді сын айтты. Ол Си Цзиньпинді сынауға 12 бет арнады. Міне, бірнеше үзінді:

Модульдік проблемалар
Си тілінде модульдік бағдарламалау мүмкін, бірақ егер бағдарламашы бірқатар қатаң ережелерді ұстанса ғана:

Әрбір модуль үшін дәл бір тақырып файлы болуы керек. Ол тек экспортталатын функция прототиптерін, сипаттамаларын және басқа ештеңені (түсініктемелерден басқа) қамтуы керек.

Сыртқы шақыру процедурасы тек осы модуль туралы тақырып файлындағы түсініктемелерді білуі керек.

Тұтастығын тексеру үшін әрбір модуль өзінің тақырып файлын импорттауы керек.

Басқа модульден кез келген ақпаратты импорттау үшін әрбір модульде #include жолдары, сондай-ақ импортталатын нәрсені көрсететін түсініктемелер болуы керек.

Функция прототиптерін тек тақырып файлдарында пайдалануға болады. (Бұл ереже қажет, себебі Си тілінде функцияның оның прототипі сияқты бір модульде орындалғанын тексеру механизмі жоқ; сондықтан прототипті пайдалану «жетпеген функция» қатесін бүркемелеуі мүмкін.)

Модульдегі кез келген жаһандық айнымалы және тақырып файлы арқылы импортталғаннан басқа кез келген функция статикалық деп жариялануы керек.

Компилятордың «прототипсіз функцияны шақыру» ескертуі қамтамасыз етілуі керек; мұндай ескерту әрқашан қате деп есептелуі керек.

Бағдарламашы тақырып файлында көрсетілген әрбір прототиптің сол модульде бір атпен жүзеге асырылатын жеке емес (яғни, қарапайым C терминологиясында статикалық емес) функцияға сәйкес келетініне көз жеткізуі керек. Өкінішке орай, Си тілінің табиғаты мұны автоматты түрде тексеруді мүмкін емес етеді.

Сіз grep-ті кез келген пайдаланудан күдіктенуіңіз керек. Егер прототип дұрыс жерде болмаса, бұл қате болуы мүмкін.

Ең дұрысы, бір командада жұмыс істейтін бағдарламашылар бір-бірінің бастапқы файлдарына қол жеткізе алмауы керек. Олар тек нысан модульдері мен тақырып файлдарын ортақ пайдалануы керек.

Айқын қиындық - бұл ережелерді аз адамдар ұстанатын болады, өйткені компилятор оларды қатаң сақтауды талап етпейді. Модульдік бағдарламалау тілі кем дегенде ішінара жақсы бағдарламашыларды нашар бағдарламашылар жасайтын хаостан қорғайды. Бірақ Си тілі мұны істей алмайды.



Smartagilee.com сайтынан алынған сурет
Көрсеткіштермен проблемалар
Деректер құрылымдарының теориясы мен тәжірибесіндегі барлық жетістіктерге қарамастан, көрсеткіштер бағдарламашылар үшін нағыз сүрінетін блок болып қала береді. Көрсеткіштермен жұмыс бағдарламаны жөндеуге кететін уақыттың едәуір бөлігін құрайды және оның дамуын қиындататын мәселелердің көпшілігін солар жасайды.

Маңызды және маңызды емес көрсеткіштерді ажырата аласыз. Біздің түсінігімізде деректер құрылымын жасау және қолдау үшін қажетті көрсеткіш маңызды болып табылады.

Мәліметтер құрылымын енгізу қажет болмаса, көрсеткіш маңызды емес болып саналады. Әдеттегі Си бағдарламасында маңыздыларға қарағанда маңызды емес көрсеткіштер көп. Мұның екі себебі бар.

Біріншісі, Си тілін қолданатын бағдарламашылар арасында, мысалы, массив элементтерін қарау кезінде олардан еш кем түспейтін басқа кіру әдістері бұрыннан бар болса да, көрсеткіштерді жасау дәстүрге айналды.

Екінші себеп - Си тілінің ережесі, оған сәйкес функцияның барлық параметрлері мән бойынша берілуі керек. Pascal VAR немесе Ada кірісінің баламасы қажет болғанда, жалғыз шешім - көрсеткішті өту. Бұл негізінен C бағдарламаларының нашар оқылуын түсіндіреді.

Маңызды көрсеткішті енгізу/шығару параметрі ретінде беру қажет болғанда жағдай нашарлайды. Бұл жағдайда функцияға көрсеткішті көрсеткішке беру керек, бұл тіпті ең тәжірибелі бағдарламашылар үшін де қиындықтар тудырады.

Си - тірі

2016 жылдың маусым айындағы деректерге сәйкес, бағдарламалау тілдерінің танымалдылығының өсуін өлшейтін TIOBE индексі C 2-ші орында екенін көрсетті:

Біреу «С» ескірген, оның кеңінен қолданылуы сәттілік пен белсенді пиардың салдары деп айтсын. Біреу UNIX болмаса, Си тілі ешқашан жасалмас еді деп айтсын. Тегтерді қосыңыз

ЛИРИКАЛЫҚ КІРІСПЕ.
Информатика факультетінде мұндай пән бар: YaSiTP (С тілі және бағдарламалау теориясы). ISIT студенттері оны үшінші курста оқиды және әдетте онымен ерекше проблемалар болмайды. және IC бар бақытсыз студенттер онымен бағдарламалауды үйренуге мәжбүр болады - университетте болған алғашқы апталардан бастап. бәрі жақсы болар еді – мектептегі оқушы аз да болса информатиканы оқып, Паскаль тілін жақсы меңгерсе – ол синтаксисті меңгеріп, тіл мен дискретті тілдің жетегінде кете береді. үйретпеген болсаңыз және білмесеңіз ше? яғни, тіпті толығымен?
онда сіздің бизнесіңіз қоқыс\жаман.
біріншіден: Хлебостроевтың лекциясында ұйықтамаңыз. төртінші жұпта оның өлшенген даусына ұйықтап қалмаудан қиын міндет жоқ, бірақ... бәрі сізге байланысты.
екіншіден: кітапты оқуды бастаңыз, мысалы, http://www.ph4s.ru/bookprogramir_1.html ол жерден сіз Богатыревтің «бағдарламалау бойынша толық ақымақтық нұсқаулық» кітабын немесе талғамыңызға сай басқа нәрсені таба аласыз.
үшінші және ең маңыздысы: ПРАКТИКА. бұл туралы мен айтатын боламын.
Үйде бірдеңе жазуға тырыспас бұрын, дұрыс студияны орнату керек. Барлық дерлік MKN 2012 тәжірибесіне сүйенсек, Vidul Studio 2010 C++ Express жинағы жұмыс істемейді. Университетте компьютерлерде МІНСІЗ жазылған, оны түзету мүмкіндігінсіз қатемен оқиды. неге біздің шаруамыз емес, біз Visual Studio 2010 (2012) Ultimate (Visual Studio Ultimate 2012) іздейміз. мысалы мына жерде: http://www.microsoft.com/visualstudio/ru... . Біз сынақ нұсқасын орнатамыз, содан кейін жаттығуды бастауға болады.

(1 ескертпе:
файл - қосымша сақтау параметрлері - кириллица құжаты. содан кейін консоль орыс әріптерін қалыпты түрде оқиды.

ЕСКЕРТПЕ 2: ұсынылған кодтан толыққанды бағдарламаны алу үшін сізге Visual Studio бағдарламасында жаңа жоба жасау керек, «бос жоба» элементін таңдаңыз, «бастапқы код файлдары» қалтасында жобаның атын көрсетіңіз, оң жақта -«C++ файлы» жаңа элементін қосу үшін басыңыз, алынған терезеге менің кодты көшіріп, оны құрастырыңыз (басқару пернелері + 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); )

«Сәлем әлем!» дегеннен кейін мұғалім берген келесі бағдарлама маған былай көрінді:
шарты: шаршы және оған жазылған шеңбер берілген. Егер шаршының қабырғасы белгілі болса, шаршының шеңберден тыс қалған ауданының жартысын табыңыз.
шешім:

#include "stdio.h" #include "math.h" #анықтау PI 3.1415926535897932384626433832795 void main() ( double x; printf("шаршы жағының мәнін енгізіңіз x = "); scanf("%lf", &x); қос f = x * x қос s = (f - z) / 2;

тұрақты кітапхананы пайдаланып опция ретінде:

#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 қос s = (f - z) / 2;

екінші тапсырмадан бесінші бағдарлама. шарты: коэффициенттері берілген квадрат теңдеуді шешу.
жүзеге асыру:

#include "stdio.h" #include "math.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); ) else ( float 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; }

(НАЗАР АУДАРЫҢЫЗ!! кітапханаларды көрсету кезінде үлкен/кіші белгілерінің орнына барлық жерде тырнақшалар көрсетіледі)

КЕЙІНГІ СӨЗ: басқа тапсырмалар кейінірек қосылады.

C++ программалау тілі(«si plus plus» деп айтылады) — объектілі-бағытталған бағдарламалауды қолдайтын көп парадигмалық бағдарламалау тілі. Bell Labs қызметкері Бьярн Строуструп 1980 жылдары C++ бағдарламалау тілін оның негізі ретінде Си программалау тілін қолданды. Си тілінің үлкен танымалдылығының арқасында C++ бағдарламалау тілі 1990 жылдардағы ең танымал тіл болды. Жаңадан бастаушыларға арналған бағдарламалау. Және ол әлі күнге дейін коммерциялық қолданбаларда өте кеңінен қолданылады. C++ бағдарламалау тілі коммерциялық қолданбаларда Си тілін алмастырды, өйткені ол бағдарламашыларға өздерінің Си түбірлерінен бас тартпай (мысалы, қарапайым С тілінде жазылған кітапханалар) үнемі өсіп келе жатқан күрделі жүйелерді дамытуға мүмкіндік береді. Объектілі-бағытталған дизайнмен қатар қазіргі Си++ тілі Си тілінен жалпы программалауды және үлгілік метабағдарламалауды қолдауымен ерекшеленеді. Бұл түр бүркеншік аттары, кірістірілген кеңейтімдер, үлгілер және // түсініктеме стиліндегі түсініктемелер арқылы жүзеге асырылады (бірақ C кейін // түсініктемесін қабылдағанын ескеріңіз). Манекендерге арналған бағдарламалау.

C++ тарихы
Stroustrup 1979 жылы Simula67 бағдарламасынан бағдарламалау негізі ретінде шабыттанған тілмен жұмыс істей бастады. AT&T бұл тілді алғаш рет 1983 жылы тамызда қолданды. Түпнұсқа компилятор Cfront деп аталды. Бірінші коммерциялық шығарылым 1985 жылдың қазан айында болды. C++ тілі 1998 жылы ISO/IEC 14882-1998 стандартымен стандартталған.

«С++» атауының тарихы
Бұл атау Рик Масциттиге (1983 жылдың ортасы) тиесілі және алғаш рет 1983 жылы желтоқсанда қолданылған. Бұрын тілдің зерттелу және даму кезеңінде оны «С кластарымен» деп атаған. Соңғы атау C тілінен және «++» операторынан (айнымалының мәнін бір көбейтеді) және компьютерлік бағдарламаның кеңейтілген мүмкіндіктерін көрсету үшін «+» ортақ атаудан келеді, мысалы: «Уикипедия +». (Қарапайым тілмен айтқанда, плюс таңбасы бағдарламаны жақсартуды және оған жаңа функцияларды беруді білдіреді) Строуструптың айтуынша: «бұл атау C-дан өзгерудің эволюциялық сипатын білдіреді». Си кодының көпшілігі C++ үшін жарамды болғанымен, C C++ тілінің ішкі жиыны емес.
Кейбір C бағдарламашылары атап өткендей, егер сіз x=3 деп жарияласаңыз; және y=x++; онда орындалғанда x= 4 және y = 3; өйткені х оның мәні у-ға тағайындалғаннан кейін көбейтіледі. Дегенмен, егер сіз y=++x деп жазсаңыз; , онда y=4 және x=4 .
Осыны қарастырғаннан кейін C++ үшін неғұрлым қолайлы атау шын мәнінде ++C болуы мүмкін. Дегенмен, C++ және ++C C тілінің кеңейтімдері болып табылады, сондықтан С++ пішіні ++C-ге қарағанда жиірек.
Педанттар C++ енгізгеннен кейін Си тілі өзін өзгертпегенін және ең дәл атауы «C +1» болуы мүмкін екенін ескеруі мүмкін.

C++ меншік құқығы
Ешкім C++ сөйлемейді. Stroustrup және AT&T C++ пайдаланғаны үшін роялти алмайды.

«Сәлем, Википедия!» бағдарламасы.
Төмендегі кодты хабарлама мәтінін басып шығаратын бағдарламаға құрастыруға болады.

Қосу // Тақырып std::cout үшін қажет // main() функциясының басы int main(int argc, const char**argv) ( // ( ... ) std:: код блоктарын қосу үшін пайдаланылады: cout<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

Класс анықтамасы

std::string пайдалануды қосыңыз; сынып InetMessage ( m_subject, m_to, m_from; жалпыға ортақ: InetMessage (const string& тақырыбы, const string& to, const string& from); string тақырыбы () const; жолдан () const; жолдан () const; );

C++ кітапханалары
C++ стандартты кітапханалары негізінен C стандартты кітапханаларының жиыны болып табылады. STL итераторлар (жоғары деңгейлі көрсеткіштер сияқты) және контейнерлер (жаңа элементтерді қосу үшін автоматты түрде өсетін массивтер сияқты) сияқты пайдалы құралдарды қамтамасыз етеді. C тіліндегідей, кітапханаға кіру мүмкіндігі стандартты тақырып файлдарын қосу үшін #include директивасын пайдалану арқылы жүзеге асады. C++ ескі емес елу стандартты тақырыптарды қамтамасыз етеді.

Тілдің болашағы
C++ бағдарламалау тілі өсіп келе жатқан талаптарды қанағаттандыру үшін дамуын жалғастыруда. Осы күнге дейін компилятор және әзірлеу ортасын әзірлеушілер барлық C++ мүмкіндіктерін (шамамен 2004) қолдау үшін күресуді жалғастыруда, бұл жағдай 1998 және 2003 жылдар арасында айтарлықтай жақсарды. Атап айтқанда, Boost.org тобы C++ бағдарламалау тілін біз білетіндей етіп жасауға және стандарттар комитетіне жұмыс істейтін және жақсартуды қажет ететін мүмкіндіктер туралы кеңес беруге көп күш жұмсады. Жүргізіліп жатқан жұмыс C++ өзінің көп парадигмалық сипатына көбірек негізделетінін көрсетеді. Boost.org сайтында орналастырылған жұмыстар, мысалы, C++ функционалдық және мета бағдарламалау мүмкіндіктерін айтарлықтай кеңейтеді. C++ тілінде әлі күнге дейін айнымалылар мен функцияларды атау стандарты жоқ, бұл әртүрлі компиляторлар шығарған кодты үйлесімсіз етеді.



Бөлісу