www.wikidata.uk-ua.nina.az
C Si plyus plyus mova programuvannya zagalnogo priznachennya 1 z pidtrimkoyu kilkoh paradigm programuvannya ob yektno oriyentovanoyi uzagalnenoyi procedurnoyi ta in B yarn Straustrup angl Bjarne Stroustrup pochav stvoryuvati C v AT amp T Bell Laboratories Myurrej Hill en Nyu Dzhersi u 1979 roci Na etapi zarodzhennya mova mala nazvu Si z klasami Zgodom Straustrup perejmenuvav movu na C u 1984 r Bere vitoki z movi programuvannya S Vpershe opisana mizhnarodnim standartom ISO IEC 14882 1998 C 98 najbilsh aktualnim zhe ye standart ISO IEC 14882 2020 C 20 C Paradigma Multiparadigmova ob yektno oriyentovana uzagalnena procedurnaData poyavi 1985Tvorci B yarn StraustrupRozrobnik ISO IEC JTC1 SC22 en WG21Ostannij reliz C 20 gruden 2020 Sistema tipizaciyi statichna nominativnaOsnovni realizaciyi G Microsoft Visual C Borland C Builder ClangDialekti ISO IEC 14882 1998 2003 2011 2014 2017 2020Pid vplivom vid Smalltalk C Simula Ada 83 ALGOL 68 CLU MLVplinula na Ada 95 C Java PHP D Aikido DaoZvichajni rozshirennya fajliv cc cpp cxx c c h hpp hh hxx abo h Repozitorij vihidnogo kodu github com cplusplus draftVebsajt isocpp org C u VikishovishiU 1990 h rokah C stala odniyeyu z najuzhivanishih mov programuvannya zagalnogo priznachennya Movu vikoristovuyut dlya sistemnogo programuvannya rozrobki prikladnogo programnogo zabezpechennya napisannya drajveriv potuzhnih servernih ta kliyentskih program a takozh dlya rozrobki rozvazhalnih program napriklad videoigor C suttyevo vplinula na inshi populyarni sogodni movi programuvannya C ta Java Zmist 1 Istoriya 1 1 Hronologiya 1 2 Istoriya nazvi 1 3 Standart C 11 1 4 Standart C 14 1 5 Standart C 17 1 6 Standart C 20 2 Osoblivosti 3 Prikladi 3 1 Priklad programi Hello world 3 2 Priklad programi zi zminnoyu 4 Tehnichnij oglyad 5 Standartna biblioteka 6 Novi mozhlivosti v porivnyanni z S 7 Ne ob yektno oriyentovani mozhlivosti 8 Ob yektno oriyentovani osoblivosti movi 8 1 Problemi starogo pidhodu 8 2 Inkapsulyaciya 8 3 Opis funkcij v tili klasu 8 4 Konstruktori i destruktori 8 5 Inshi mozhlivosti funkcij chleniv 8 6 Uspadkuvannya 8 7 Polimorfizm 8 8 Druzi 9 Perevagi ta nedoliki 9 1 Perevagi movi C 9 2 Nedoliki movi C 9 3 Kritika movi C 9 4 Porivnyannya C z movami Java i C 10 Primitki 11 Posilannya 11 1 Onlajn kursi 11 2 Statti ta knigi 12 Div takozhIstoriya red Hronologiya red nbsp B yarn Straustrup tvorec moviIstoriya rozvitku movi programuvannya S mistit taki klyuchovi podiyi 1 kviten 1979 pochatok roboti nad Ci z klasami C with Classes zhovten 1979 robocha versiya Ci z klasami z CPre kompilyatorom serpen 1983 Ci z klasami vpershe vikoristovuyetsya v Bell Labs 1984 nazva C lyutij 1985 pershij zovnishnij vipusk kompilyatora C Cfront en Relese E Educational vipusk dlya navchalnih zakladiv zhovten 1985 pershij komercijnij vipusk Cfront 1 0 lyutij 1987 Cfront 1 2 gruden 1987 pershij vipusk GNU C 1 13 1988 Pershi vipuski Oregon Software C i Zortech C cherven 1989 Cfront 2 0 1989 kniga The Annotated C Reference Manual ARM Zasnovano komitet ANSI C 1990 persha tehnichna zustrich komitetu ANSI C prijnyato shabloni templates vinyatkovi situaciyi exceptions pershij vipusk Borland C 1991 Persha zustrich komitetu ISO IEC Cfront 3 0 z shablonami kniga The C Programming Language 2 ga redakciya 1992 Pershi vipuski IBM DEC Microsoft C 1993 RTTI Run time type identification viznachennya tipu pid chas vikonannya prijnyato prostori nazv namespaces i string shablonnij za simvolnim tipom prijnyato 1994 prijnyato STL 1997 ostatochne golosuvannya komitetu za zavershenij standart 1998 ratifikovano standart ISO IEC 14882 1998 C tak zvanij C 98 2003 ratifikovano standart ISO IEC 14882 2003 C tak zvanij C 03 pochatok roboti nad C 0xPodalshij rozvitok opisanij v stattyah pro vidpovidni versiyi S V 2023 roci u kategoriyi najpopulyarnishih mov programuvannya sered IT specialistiv zgidno rejtingu IEEE Spectrum yakij ohoplyuvav 59 mov programuvannya top 5 viglyadav tak Python Java C C JavaScript 2 Istoriya nazvi red Nazva Si bula vigadana Rikom Massitti Rick Mascitti i vpershe bulo vikoristana v grudni 1983 roku Ranishe na etapi rozrobki nova mova nazivalasya Si z klasami Im ya sho vijshlo u rezultati pohodit vid operatora Si zbilshennya znachennya zminnoyi na odinicyu i poshirenomu sposobu prisvoyennya novih imen komp yuternim programam sho polyagaye v dodavanni do imeni simvolu dlya poznachennya polipshen Zgidno zi Straustrupom cya nazva ukazuye na evolyucijnu prirodu zmin Ci Virazom S nazivali ranishnyu ne pov yazanu z Si movu programuvannya Deyaki programisti na Si mozhut vidmititi sho yaksho vikonuyutsya virazi x 3 y x to v rezultati vijde x 4 i y 3 tomu sho x zbilshuyetsya tilki pislya prisvoyennya jogo u Prote yaksho drugij viraz bude y x to vijde x 4 i y 4 Vihodyachi z cogo mozhna zrobiti visnovok sho logichnishe bulo b nazvati movu ne Si a Si Prote obidva virazi c i c zbilshuyut s a krim togo viraz c poshirenishij Pedanti takozh mozhut vidmititi sho vvedennya movi Si ne zminyuye samogo Si tomu najtochnishim im yam bulo b S 1 Standart C 11 red Dokladnishe C 11U serpni 2011 roku zavershilasya trivala epopeya z prijnyattyam novogo standartu dlya movi Si Komitet ISO zi standartizaciyi C odnogolosno zatverdiv specifikaciyu C 0X yak mizhnarodnij standart C 11 3 Standart C 0X planuvalosya vipustiti she v 2008 roci ale jogo prijnyattya postijno vidkladalosya Bilshist predstavlenih v standarti mozhlivostej vzhe pidtrimuyutsya v takih kompilyatorah yak GCC IBM C Intel C i Visual C ctandartni biblioteki z pidtrimkoyu C buli realizovani v ramkah proektu Boost Novij standart rozvivavsya ponad 10 rokiv i prijshov na zminu standartam C 98 i C 03 Vidznachayetsya sho yaksho vidminnosti mizh standartami C 98 i C 03 buli nastilki neznachnimi sho yih mozhna bulo ne pomititi to standart C 11 mistit nizku kardinalnih pokrashen yak samoyi movi tak i standartnoyi biblioteki Za slovami B yarna Straustrupa tvorcya C C 11 vidchuvayetsya yak nova mova chastini yakoyi krashe poyednuyutsya odna z odnoyu U C 11 visokorivnevij stil programuvannya stav prirodnishim Krim togo mova stala prostishoyu dlya vivchennya Standart C 14 red Dokladnishe C 14Povna nazva International Standard ISO IEC 14882 2014 E Programming Language C 4 C 14 mozhna rozglyadati yak nevelike rozshirennya dlya C 11 yake v osnovnomu mistit vipravlennya pomilok i neznachni pokrashennya Komitet z rozrobki novogo standartu opublikuvav chernetku N3690 15 travnya 2013 5 Robochij variant chernetki N3936 buv opublikovanij 2 bereznya 2014 roku finalnij period golosuvannya zakritij 15 serpnya 2014 roku a rezultat odnogolosne shvalennya ogoloshenij 18 serpnya 2014 roku Data oficijnogo vipusku C 14 15 grudnya 2014 6 Oskilki rozrobka standartu bula dosit trivaloyu i ne bulo viznacheno roku vipusku v period rozrobki takozh mav poshirenu nazvu C 1y analogichno do togo yak standart C 11 do jogo vipusku nazivali C 0x vipusk ciyeyi versiyi ochikuvali do 2010 roku Opisani nizhche mozhlivosti movi vidpovidayut chernetci N3797 Arhivovano 11 sichnya 2020 u Wayback Machine Voni mozhut desho vidriznyatisya vid ostatochnoyi versiyi standartu Arhivovano 29 sichnya 2020 u Wayback Machine Standart C 17 red Dokladnishe C 17Standart C 17 7 8 dijshov do chornovoyi versiyi standartu v berezni 2017 roku i buv ostatochno zatverdzhena 8 veresnya 2017 roku 9 Standart oficijno opublikovanij u grudni 2017 10 U S 17 bulo vneseno ryad zmin v movu zokrema dodano dekilka novih bibliotek lt string view gt lt execution gt algoritmiv std exclusive scan std for each ta klasiv do STL polipsheno robotu z lyambda virazami onovleno biblioteku lt thread gt dlya multipotokovogo programuvannya Standart C 20 red Dokladnishe C 20Standart C 20 zatverdzheno 4 veresnya 2020 roku Standart oficijno opublikovanij u grudni 2020 Cya versiya maye nabagato bilshe novovveden v porivnyanni z C 14 ta C 17 Zokrema cya versiya vvodit koncepciyi spivprogrami novij operator porivnyannya lt gt tosho Osoblivosti red Pri stvorenni S pragnuli zberegti sumisnist z movoyu S Bilshist program na S spravno pracyuvatimut i z kompilyatorom S S maye sintaksis zasnovanij na sintaksisi S div spisok operatoriv mov S ta S Novovvedennyami S porivnyano z S ye pidtrimka ob yektno oriyentovanogo programuvannya cherez klasi pidtrimka uzagalnenogo programuvannya cherez shabloni dopovnennya do standartnoyi biblioteki dodatkovi tipi danih obrobka vinyatkiv prostori imen vbudovani funkciyi perevantazhennya operatoriv perevantazhennya imen funkcij posilannya i operatori upravlinnya vilno rozpodilenoyu pam yattyu Prikladi red Priklad programi Hello world red Nizhche navedeno priklad prostoyi programi na S yaka vivodit na standartnij potik vivodu ryadok Hello world include lt iostream gt Pidklyuchennya fajlu z funkciyami ta polyami imen using namespace std Vkoristannya polya imen int main Ce golovna funkciya cout lt lt Hello world lt lt endl return 0 Kazhe te sho programma zavershilasya normalno ce poznachka pochatku komentaryaPriklad programi zi zminnoyu red Pislya zapusku programi na ekrani z yavitsya povidomlennya How old are you a kursor bude rozmishenij v nastupnomu ryadku Tam potribno vvesti cilochislove znachennya ta natisnuti klavishu Enter Priklad vvodimo chislo 25 todi z yavitsya povidomlennya You are 25 years old include lt iostream gt using namespace std int main int age Zminna dlya zapisu viku cout lt lt How old are You n Skilki vam rokiv cin gt gt age Zchituvannya viku cout lt lt You are lt lt age lt lt years old n Rezultat return 0 Tehnichnij oglyad red Chastina informaciyi v cij statti zastarila Vi mozhete dopomogti onovivshi yiyi Mozhlivo storinka obgovorennya mistit zauvazhennya shodo potribnih zmin kviten 2020 V 1998 roci mova S bula standartizovana Mizhnarodnoyu organizaciyeyu standartizaciyi pid nomerom 14882 1998 Mova Programuvannya S Potochnij standart C 11 vin buv prijnyatij u 2011 roci robochoyu grupoyu MOS pislya desyatirichnoyi pidgotovki Standart S na 1998 rik skladayetsya z dvoh osnovnih chastin yadra movi i standartnoyi biblioteki Standartna biblioteka S uvibrala v sebe biblioteku shabloniv STL sho rozroblyalasya odnochasno iz standartom Zaraz nazva STL oficijno ne vzhivayetsya prote v kolah programistiv na S cya nazva vikoristovuyetsya dlya poznachennya chastini standartnoyi biblioteki sho mistit viznachennya shabloniv kontejneriv iteratoriv algoritmiv i funktoriv Standart S mistit normativne posilannya na standart Si vid 1990 roku i ne viznachaye samostijno ti funkciyi standartnoyi biblioteki yaki zapozichuyutsya iz standartnoyi biblioteki S Poza tim isnuye velichezna kilkist bibliotek S kotri ne vhodyat v standart U programah na S mozhna vikoristovuvati bagato bibliotek S Standartizaciya viznachila movu programuvannya S prote za ciyeyu nazvoyu mozhut hovatisya takozh nepovni obmezheni dostandartni varianti movi Spochatku mova rozvivalasya poza formalnimi ramkami spontanno u miru zavdan sho stavilisya pered nim Rozvitok movi suprovodiv rozvitok kross kompilyatora Cfront Novovvedennya v movi vidbivalisya v zmini nomera versiyi kross kompilyatora Ci nomeri versij kross kompilyatora rozpovsyudzhuvalisya i na samu movu Aktualnij standart uhvalenij v 2023 roci C 23 Standartna biblioteka red Standartna biblioteka S vklyuchaye standartnu biblioteku S z nevelikimi zminami yaki roblyat yiyi vidpovidnishoyu dlya movi S Insha velika chastina biblioteki S zasnovana na Standartnij Biblioteci Shabloniv STL Vona nadaye taki vazhlivi instrumenti yak kontejneri napriklad vektori i spiski i iteratori uzagalneni vkazivniki sho nadayut dostup do cih kontejneriv yak do masiviv Krim togo STL dozvolyaye shozhim chinom pracyuvati i z inshimi tipami kontejneriv napriklad asociativnimi spiskami stekami chergami Vikoristovuyuchi shabloni mozhna pisati uzagalneni algoritmi zdatni pracyuvati z bud yakimi kontejnerami abo poslidovnostyami dostup do chleniv yakih zabezpechuyut iteratori Tak samo yak i v S mozhlivosti bibliotek aktivizuyutsya vikoristannyam direktivi include dlya vklyuchennya standartnih fajliv Vsogo v standarti S viznacheno 50 takih fajliv STL do vklyuchennya v standart S bula storonnoyu rozrobkoyu na pochatku firmi HP a potim SGI Standart movi ne nazivaye yiyi STL oskilki cya biblioteka stala neviddilnoyu chastinoyu movi prote bagato lyudej dosi vikoristovuyut cyu nazvu shob vidriznyati yiyi vid reshti chastini standartnoyi biblioteki potoki vvedennya vivedennya Iostream pidrozdil Si tosho Proekt pid nazvoyu STLport Arhivovano 7 chervnya 2018 u Wayback Machine zasnovanij na SGI STL zdijsnyuye postijne onovlennya STL IOstream i ryadkovih klasiv Deyaki inshi proyekti takozh zajmayutsya rozrobkoyu privatnih zastosuvan standartnoyi biblioteki dlya riznih konstruktorskih zavdan Kozhen virobnik kompilyatoriv S obov yazkovo postavlyaye yakus realizaciyu ciyeyi biblioteki oskilki vona ye duzhe vazhlivoyu chastinoyu standartu i shiroko vikoristovuyetsya Prichinoyu uspihu STL zokrema yiyi vhid do standartnoyi biblioteki S bula nacilenist na shiroke kolo zavdan i uzagalnena struktura V comu sensi blizkoyu za duhom STL na sogodni ye biblioteka Boost Boost tezh ye bibliotekoyu zagalnogo zastosuvannya i tezh vplivaye na formuvannya standartnoyi biblioteki S Novi mozhlivosti v porivnyanni z S red Mova Si bagato v chomu ye nadmnozhinoyu S Novi mozhlivosti S vklyuchayut ogoloshennya u viglyadi viraziv peretvorennya tipiv u viglyadi funkcij operatori new i delete tip bool posilannya rozshirene ponyattya konstantnosti ta zminnosti funkciyi sho pidstavlyayutsya argumenti za umovchannyam pereviznachennya prostori imen klasi vklyuchayuchi i vsi pov yazani z klasami mozhlivosti taki yak uspadkuvannya funkciyi chleni metodi virtualni funkciyi abstraktni klasi i konstruktori pereviznachennya operatoriv shabloni operator obrobku vinyatkiv dinamichnu identifikaciyu i bagato sho inshe Si ye takozh movoyu strogogo tipuvannya i nakladaye bilshe vimagan shodo dotrimannya tipiv porivnyano z Si U S z yavilisya komentari u viglyadi podvijnoyi kosoyi riski yaki buli v poperedniku S movi BCPL Deyaki osoblivosti S piznishe buli pereneseni v S napriklad klyuchovi slova const i inline ogoloshennya v ciklah for i komentari v stili S U piznishih realizaciyah S takozh buli predstavleni mozhlivosti yakih nemaye v S napriklad makrosi vararg i pokrashena robota z masivami parametrami Ne ob yektno oriyentovani mozhlivosti red V comu rozdili opisuyutsya mozhlivosti bezposeredno ne pov yazani z ob yektno oriyentovanim programuvannyam OOP Bagato yaki z nih prote osoblivo vazhlivi u poyednanni z OOP Klyuchove slovo inline oznachaye sho funkciya ye horoshim kandidatom na optimizaciyu pri yakij v miscyah zvernennya do funkciyi kompilyator vstavit tilo ciyeyi funkciyi a ne kod vikliku Priklad inline double Sqr double x return x x Zamist funkcij malloc i free vvedeni novi operatori new i delete Yaksho T dovilnij tip to new T vidilyaye pam yat dostatnyu dlya rozmishennya odnogo ob yekta tipu T pislya zavershennya vikliku operatora kompilyator zdijsnyuye inicializaciyu ob yekta viklikayuchi jogo konstruktor yaksho takij buv viznachnij i povertaye vkazivnik tipu T new T n vidilyaye pam yat dostatnyu dlya rozmishennya n ob yektiv tipu T pislya zavershennya vikliku operatora kompilyator zdijsnyuye inicializaciyu kozhnogo z n ob yektiv i povertaye vkazivnik tipu T delete p zvilnyaye pam yat na yaku posilayetsya vkazivnik p vidilenu dlya nogo ranishe operaciyeyu new T Deincializaciya ob yekta viklikayuchi destruktora zabezpechuyetsya kompilyatorom she do vikliku operatora delete delete p zvilnyaye oblast pam yati vidilenu dlya cogo masivu ranishe operaciyeyu new T n Deincializaciya kozhnogo elementu masivu zabezpechuyetsya kompilyatorom she do vikliku operatora Yak vidno odniyeyu z principovih vidminnostej operatoriv new ta delete vid svoyih poperednikiv malloc i free ye obov yazkovist inicializaciyi ob yektiv pam yat pid yaki bulo priznacheno Inshoyu vidminnistyu ye te sho zagalna realizaciya tobto viznachena za umovchannyam operatora new ne povertaye nulove znachennya vkazivnika u vipadku pomilki priznachennya pam yati napriklad z prichini yiyi braku Natomist new kidaye vinyatok napriklad std bad alloc v situaciyi braku pam yati Tak samo yak i dlya free yaksho znachennyam argumentu operatora delete ye 0 ani zvilnennya pam yati ani deincializaciya ne vidbuvayetsya pri comu podibna situaciya ne vvazhayetsya pomilkovoyu Funkciyi mozhut prijmati argumenti za posilannyam Napriklad funkciya void f int amp x x 3 prisvoyuye svoyemu argumentu znachennya 3 Funkciyi takozh mozhut povertati rezultat za posilannyam i posilannya mozhut buti poza vsyakim zv yazkom z funkciyami Napriklad double amp b a 3 b sin b ekvivalentno a 3 sin a 3 Posilannya pevnoyu miroyu shozhi z vkazivnikami z takimi osoblivostyami pri opisi posilannya inicializuvalisya vkazivnikom na isnuyuche znachennya danogo tipu posilannya dovichno ukazuye na odnu i tu zh adresu pri zvernenni do posilannya operaciya chitannya pam yati za adresoyu posilannya provoditsya avtomatichno Na vidminu vid vkazivnikiv posilannya ne mozhe buti konstantnim same po sobi odnak mozhe posilatisya na konstantnij ob yekt Napriklad int const amp const ref a 3 ye nekorektnim z tochki zoru S virazom na vidminu vid int const const ref amp a 3 v svoyu chergu i int const amp ref a 3 i int const ref amp a 3 ye cilkom prijnyatnimi Mozhut buti dekilka funkcij z odnim i tim zhe im yam ale riznimi tipami abo kilkistyu argumentiv perevantazhennya funkcij pri comu tip znachennya sho povertayetsya na perevantazhennya ne vplivaye Napriklad cilkom mozhna pisati void Print int x void Print double x void Print int x int y Odin abo dekilka ostannih argumentiv funkciyi mozhut zadavatisya za umovchannyam Napriklad yaksho funkciya opisana yak void f int x int y 5 int z 10 vikliki f 1 f 1 5 i f 1 5 10 ekvivalentni Pri opisi funkcij vidsutnist argumentiv v duzhkah oznachaye na vidminu vid Si sho argumentiv nemaye a ne te sho voni nevidomi Yaksho argumenti nevidomi treba koristuvatisya bagatokrapkoyu napriklad int printf const char fmt Tip pershogo argumentu povinen buti zadanij Mozhna opisuvati operatori nad novimi tipami Napriklad tak struct Date int day month year void operator struct Date amp date Operatori nichim ne vidriznyayutsya vid inshih funkcij Ne mozhna opisuvati operatori nad zumovlenimi tipami skazhimo pereviznachati mnozhennya chisel ne mozhna vigaduvati novi operaciyi yakih nemaye v S skazhimo arnist kilkist parametriv i prioritet operacij zberigayetsya skazhimo u virazi a b c spochatku vikonuvatimetsya mnozhennya a potim skladannya do yakih bi tipiv ne nalezhali a b i s Mozhna pereviznachiti operator z odnim parametrom i z bud yakim chislom parametriv Dodani prostori imen namespace Napriklad yaksho napisatinamespace Foo const int x 5 typedef int T void f y return y x double g T to poza figurnimi duzhkami mi povinni zvertatisya do T x f g yak Foo T Foo x Foo f Foo g Yaksho mi v yakijs odinici translyaciyi fajl osnovnogo kodu napriklad myFile cpp ta vsi zagolovkovi fajli sho vin vklyuchaye hochemo zvertatisya do nih bezposeredno mi mozhemo napisati using namespace Foo Abo zh using Foo T Takozh mozhna stvoriti sinonim na vzhe isnuyuchij prostir imen napriklad abi uniknuti postijno povtoryuvati dovgu nazvu prostoru namespace MyVeryOwnNameSpace typedef std vector lt std string gt StringTable namespace My MyVeryOwnNameSpace Prostori imen potribni shob ne vinikalo kolizij mizh paketami sho mayut odnakovi imena globalnih zminnih funkcij i tipiv Specialnim vipadkom ye bezimennij prostir imen namespace Vsi imena opisani v nomu dostupni v potochnij odinici translyaciyi i bilshe nide nenachebto mi do kozhnogo opisu pripisali static Dodanij novij tip bool sho maye znachennya true i false Operaciyi porivnyannya povertayut tip bool Virazi v duzhkah pislya if while privodyatsya do tipu bool oznachaye sho vsya chastina ryadka sho zalishilasya ye komentarem Dodani shabloni template Napriklad template lt class T gt T Min T x T u return x lt y x y viznachaye funkciyu Min dlya bud yakih tipiv Shabloni mozhut zadavati ne tilki funkciyi ale i tipi Napriklad template lt class T gt struct Array int len T val viznachaye masiv znachen bud yakogo tipu pislya chogo mi mozhemo pisati Array lt float gt x Vvedena standartna biblioteka shabloniv STL angl Standard Template Library sho viznachaye shabloni i funkciyi dlya vektoriv odnovimirnih masiviv dovilnoyi dovzhini mnozhin asociativnih masiviv map spiskiv simvolnih ryadkiv potokiv vvedennya vivodu ta inshi shabloni i funkciyi Yaksho opisana struktura klas pro klasi div nizhche ob yednannya union abo pererahuvannya enum yiyi im ya ye im yam tipu napriklad struct Time int hh mm ss Time t1 t2 Useredini strukturi abo klasu mozhna opisuvati novi tipi yak cherez typedef tak i cherez opis inshih struktur abo klasiv Dlya dostupu do takih tipiv poza strukturoyu abo klasom do imeni tipu dodayetsya im ya strukturi i dvi dvokrapki struct S typedef int T T x S T u Ob yektno oriyentovani osoblivosti movi red S dodaye do S ob yektno oriyentovani mozhlivosti Vin vvodit klasi yaki zabezpechuyut tri najvazhlivishi vlastivosti OOP inkapsulyaciyu uspadkuvannya i polimorfizm Problemi starogo pidhodu red V movi C osnovnim sposobom organizaciyi danih buli strukturi Struktura skladayetsya z naboru poliv yaki niyak ne zahisheni Yaksho elementi strukturi mayut zminnu dovzhinu yih predstavlyayut u viglyadi vkazivnikiv Vidilennya i zvilnennya pam yati pid ci vkazivniki roblyatsya vruchnu Tak napriklad odnovimirnij masiv zminnoyi dovzhini v movi C z perevirkoyu mezh mozhe predstavlyatisya takim chinom struct Array double val int len void FreeArray const struct Array void AllocArray const struct Array int len double Elem const struct Array int i void ChangeElem const struct Array int i double x Taka realizaciya nebezpechna i neefektivna z bagatoh prichin Neobhidno viklikati FreeArray i AllocArray Programist mozhe zabuti viklikati odnu z cih funkcij abo viklikati yiyi duzhe rano zapizno abo dvichi abo z vkazivnikom na nepravilnij masiv Vse ce privodit do pomilok sho vazhko viyaviti Funkciyi Elem i ChangeElem povilni Nemaye niyakogo sposobu pereshkoditi programistam stvoryuvati i inshi funkciyi dlya roboti iz strukturoyu Array Ci funkciyi mozhut robiti z polyami len i val bud sho Nemaye niyakogo sposobu pereshkoditi programistam bezposeredno minyati polya len i val Prisvoyennya ob yektiv tipu struct Array privede do togo sho yihni polya val ukazuvatimut na odnu i tu zh oblast pam yati Nemaye niyakogo sposobu ni zaboroniti prisvoyennya ni zminiti taku povedinku Mova S vikoristovuyuchi OOP usuvaye vsi ci problemi Inkapsulyaciya red Osnovnim sposobom organizaciyi informaciyi v S ye klasi Na vidminu vid tipu struktura struct movi S sho skladayetsya tilki z poliv klas class S skladayetsya z poliv i funkcij chleniv abo metodiv angl member functions Polya buvayut publichnimi public zahishenimi protected i privatnimi private U S tip struktura analogichnij tipu klas vidminnist v tomu sho za umovchannyam polya i funkciyi chleni u strukturi publichni a u klasu privatni Z publichnimi polyami mozhna robiti zovni klasu vse sho zavgodno Do zahishenih i privatnih poliv ne mozhna zvertatisya zzovni klasu shob ne porushiti cilisnist danih klasu Sproba takogo zvernennya vikliche pomilku kompilyaciyi Do takih poliv mozhut zvertatisya tilki funkciyi chleni klasu a takozh tak zvani funkciyi druzi i funkciyi chleni klasiv druziv pro ponyattya druziv v C divis nizhche Poza tilom funkcij chleniv a takozh druziv zahisheni i vlasni polya nedostupni navit dlya chitannya Takij zahist poliv nazivayetsya inkapsulyaciyeyu Vikoristovuyuchi inkapsulyaciyu avtor klasu mozhe zahistiti svoyi dani vid nekorektnogo vikoristannya Krim togo vona zamislyuvalasya dlya polegshennya sumisnoyi rozrobki klasiv Malosya na uvazi sho zmina sposobu zberigannya danih yaksho voni ogolosheni yak zahisheni abo privatni ne vimagaye vidpovidnih zmin v klasah yaki vikoristovuyut zminenij klas Napriklad yaksho v starij versiyi klasu dani zberigalisya u viglyadi linijnogo spisku a v novij versiyi u viglyadi dereva ti klasi yaki buli napisani do zmini formatu zberigannya danih perepisuvati ne bude potribno yaksho dani buli privatnimi abo zahishenimi u ostannomu vipadku yaksho vikoristovuyuchi klasi ne buli klasami nashadkami oskilki zhoden z nih cih klasiv ne mig bi bezposeredno zvertatisya do danih a tilki cherez standartni funkciyi yaki v novij versiyi mayut vzhe korektno pracyuvati z novim formatom danih Navit operator dostupu operator mozhe buti viznachenij yak taka standartna funkciya Funkciyi chleni yak i polya mozhut buti publichnimi zahishenimi i privatnimi Publichni funkciyi mozhe viklikati bud hto a zahisheni i vlasni tilki funkciyi chleni i druzi Vikoristovuyuchi inkapsulyaciyu strukturu Array z poperednogo rozdilu mozhna perepisati takim chinom class Array public void Alloc int new len void Free inline double Elem int i inline void ChangeElem int i double x protected int len double val void Array Alloc int new len if len gt 0 Free len new len val new double new len void Array Free delete val len 0 inline double Array Elem int i assert i gt 0 amp amp i lt len return val i inline void Array ChangeElem int i double x assert i gt 0 amp amp i lt len val i x I dali Array a a Alloc 10 a ChangeElem 3 2 78 double b a Elem 3 a Free Tut masiv a maye 4 publichnih funkciyi chlena i 2 zahishenih polya Opisuvach inline oznachaye sho zamist vikliku funkciyi yiyi kod pidstavlyayetsya v tochku vikliku sho rozv yazuye problemu neefektivnosti Opis funkcij v tili klasu red V tili klasu mozhna vkazati tilki zagolovok funkciyi a mozhna opisati vsyu funkciyu U drugomu vipadku vona vvazhayetsya vbudovanoyu inline napriklad class Array public void Alloc int len if len gt 0 Free val new double len len i tak dali Konstruktori i destruktori red Prote v navedenomu prikladi ne virishena vazhliva problema funkciyi Alloc i Free yak i ranishe treba viklikati vruchnu Insha problema danogo prikladu nebezpeka operatora prisvoyennya Dlya rozv yazannya cih problem u movu buli vvedeni konstruktori i destruktori Konstruktor viklikayetsya shorazu koli stvoryuyetsya ob yekt danogo tipu destruktor pri znishenni Pri peretvorennyah tipiv prisvoyenni peredachi parametra tezh viklikayutsya konstruktori i pri neobhidnosti destruktori Z konstruktorami i destruktorami klas viglyadaye tak class Array public Array len 0 val NULL Array int len len len val new double len Array const Array amp a Array Free inline double Elem int i inline void ChangeElem int i double x protected void Alloc int len void Free int len double val Array Array const Array amp a len a len val new double len for int i 0 i lt len i val i a val i Tut Array Array konstruktor a Array Array destruktor Konstruktor kopiyuvannya angl copy constructor Array Array const Array amp viklikayetsya pri prisvoyenni Teper ob yekt klasu Array ne mozhna zipsuvati yak bi mi jogo ne stvoryuvali sho b mi ne robili jogo znachennya bude korektnim tomu sho konstruktor viklikayetsya avtomatichno Vsi nebezpechni operaciyi z vkazivnikami zahovani v zahisheni funkciyi Array a 5 viklikayetsya Array Array int Array b viklikayetsya Array Array Array c a viklikayetsya Array Array const Array amp Array d a te same b c vidbuvayetsya viklik operatora yaksho vin ne viznachenij yak v danomu vipadku to viklikayetsya operator prisvoyennya za umovchannyam yakij zdijsnyuye pobitove kopiyuvannya dlya bazovih tipiv i viklik operatora prisvoyennya dlya koristuvacha yak pravilo konstruktor kopij i operator prisvoyennya pereviznachayutsya poparno Operator new tezh viklikaye konstruktori a delete destruktori Za umovchannyam kozhen klas maye konstruktor bez parametriv i destruktor Konstruktor bez parametriv za umovchannyam viklikaye konstruktori vsih elementiv a destruktor yihni destruktori Inshi konstruktori za umovchannyam ne viznacheni Klas mozhe mati skilki zavgodno konstruktoriv z riznimi naborami parametriv ale tilki odin destruktor bez parametriv Inshi mozhlivosti funkcij chleniv red Funkciyi chleni mozhut buti i operaciyami class Array inline double amp operator int n I dali Array a 10 double b a 5 Funkciyi chleni i lishe voni mozhut mati opisuvach const class Array inline double operator int n const Taki funkciyi ne mayut prava zminyuvati polya klasu okrim poliv viznachenih yak mutable Yaksho voni namagayutsya ce zrobiti kompilyator povinen vidati povidomlennya pro pomilku Uspadkuvannya red Dlya stvorennya klasiv z dodanoyu funkcionalnistyu vvodyat uspadkuvannya Klas nashadok maye polya i funkciyi chleni bazovogo klasu ale ne maye prava zvertatisya do privatnih private poliv i funkcij bazovogo klasu U comu i polyagaye riznicya mizh privatnimi i zahishenimi chlenami Klas nashadok mozhe dodavati svoyi polya i funkciyi abo pereviznachati funkciyi bazovogo klasu Za umovchannyam konstruktor nashadka bez parametriv viklikaye konstruktor bazovogo klasu a potim konstruktori dodanih elementiv Destruktor pracyuye v zvorotnomu poryadku Inshi konstruktori dovoditsya viznachati shorazu nanovo Na shastya ce mozhna zrobiti viklikom konstruktora bazovogo klasu class ArrayWithAdd public Array ArrayWithAdd int n Array n ArrayWithAdd Array ArrayWithAdd const Array amp a Array a void Add const Array amp a Nashadok ce bilsh nizh bazovij klas tomu vin mozhe vikoristovuvatisya skriz de vikoristovuyetsya bazovij klas ale ne navpaki Uspadkuvannya buvaye publichnim zahishenim i privatnim Pri publichnomu uspadkuvanni publichni i zahisheni chleni bazovogo klasu zberigayut svij status a do privatnih ne mozhut zvertatisya navit funkciyi chleni nashadka Zahishene uspadkuvannya vidriznyayetsya tim sho pri nim publichni chleni bazovogo klasu ye zahishenimi chlenami nashadka Pri privatnomu uspadkuvanni do zhodnogo chlena bazovogo klasu navit funkciyi chleni nashadka prava zvertatisya ne mayut Yak pravilo publichne uspadkuvannya zustrichayetsya znachno chastishe za inshi Klas mozhe buti nashadkom dekilkoh klasiv Ce nazivayetsya mnozhinnim uspadkuvannyam Takij klas volodiye polyami i funkciyami chlenami vsih jogo predkiv Napriklad klas FlyingCat mozhe buti nashadkom klasiv Cat i FlyingAnimal class Cat void Purr class FlyingAnimal void Fly class FlyingCat public Cat public FlyingAnimal PurrAndFly Purr Fly Polimorfizm red Polimorfizmom v programuvanni nazivayetsya pereviznachennya nashadkom funkcij chleniv bazovogo klasu napriklad class Figure void Draw const class Square public Figure void Draw const class Circle public Figure void Draw const V danomu prikladi yaka z funkcij bude viklikana Circle Draw Square Draw abo Figure Draw viznachayetsya pid chas kompilyaciyi Napriklad yaksho napisati Figure x new Circle 0 0 5 x gt Draw to bude viklikane Figure Draw oskilki x ob yekt klasu Figure Takij polimorfizm nazivayetsya statichnim Ale v C ye i dinamichnij polimorfizm koli funkciya sho viklikayetsya viznachayetsya pid chas vikonannya Dlya cogo funkciyi chleni povinni buti virtualnimi class Figure virtual void Draw const class Square public Figure virtual void Draw const class Circle public Figure virtual void Draw const Figure figures 10 figures 0 new Square 1 2 10 figures 1 new Circle 3 5 8 for int i 0 i lt 10 i figures i gt Draw U comu razi dlya kozhnogo elementu bude viklikana Square Draw abo Circle Draw zalezhno vid vidu figuri Chisto virtualnoyu funkciyeyu nazivayetsya funkciya chlen yaka ne viznachena v bazovomu klasi a tilki v nashadkah class Figure virtual void Draw const 0 Os ce 0 i oznachaye sho funkciya chisto virtualna Abstraktnim klasom nazivayetsya takij u yakogo ye hoch bi odna chisto virtualna funkciya chlen Ob yekti takih klasiv stvoryuvati zaboroneno Abstraktni klasi vikoristovuyutsya yak interfejsi Druzi red Funkciyi druzi ce funkciyi sho ne ye funkciyami chlenami prote mayut dostup do zahishenih i vlasnih poliv i funkcij chleniv klasu Voni povinni buti opisani v tili klasu yak friend Napriklad class Matrix friend Matrix Multiply Matrix m1 Matrix m2 Matrix Multiply Matrix m1 Matrix m2 Tut funkciya Multiply mozhe zvertatisya do bud yakih poliv i funkcij chleniv klasu Matrix Isnuyut takozh klasi druzi Yaksho klas A drug klasu B to vsi jogo funkciyi chleni mozhut zvertatisya do bud yakih poliv i funkcij chleniv klasu B Napriklad class Matrix friend class Vector Prote v S ne diye pravilo drug mogo druga mij drug Za standartom C 03 vkladenij klas ne maye prav dostupu do zakritih chleniv ohoplyuyuchogo klasu i ne mozhe buti ogoloshenij jogo drugom ce vihodit z viznachennya terminu drug yak nechlena klasu Prote bagato rozpovsyudzhenih kompilyatoriv porushuyut obidva ci pravila mozhe zvazhayuchi na sukupnu divnist cih pravil Perevagi ta nedoliki red Perevagi movi C red Standartizaciya C viznachayetsya mizhnarodnim standartom a otzhe ne kontrolyuyetsya yakoyus odnoyu firmoyu chi lyudinoyu Shvidkodiya Shvidkist roboti program na S praktichno ne postupayetsya programam na S hocha programisti otrimali v svoyi ruki novi mozhlivosti i novi zasobi Efektivnist Rishennya rozrobleni na S mozhut vikoristovuvati minimalnu neobhidnu kilkist resursiv takih yak pam yat CPU energiya ta inshi Masshtabovanist Na movi C rozroblyayut programi dlya najriznomanitnishih platform i sistem yaki variyuyutsya za rozmirom vid kilkoh do miljoniv ryadochkiv kodu Mozhlivist roboti na nizkomu rivni z pam yattyu adresami portami Sho pri neoberezhnomu vikoristanni mozhe legko peretvoritisya na nedolik Mozhlivist stvorennya uzagalnenih algoritmiv dlya riznih tipiv danih yihnya specializaciya i obchislennya na etapi kompilyaciyi z vikoristannyam shabloniv Pidtrimuyutsya rizni stili ta tehnologiyi programuvannya vklyuchayuchi tradicijne procedurne programuvannya OOP uzagalnene programuvannya metaprogramuvannya shabloni makrosi Nedoliki movi C red Nayavnist bezlich mozhlivostej sho porushuyut principi tipobezpeki privodit do togo sho v S programi mozhe legko zakrastisya vazhkovlovima pomilka Zamist kontrolyu z boku kompilyatora rozrobniki vimusheni dotrimuvatisya velmi netrivialnih pravil koduvannya Po suti ci pravila obmezhuyut S ramkami yakoyis bezpechnishoyi pidmovi Bilshist problem tipobezpeki S uspadkovana vid S ale vazhlivu rol v comu pitanni graye i vidmova avtora movi vid ideyi vikoristovuvati avtomatichne upravlinnya pam yattyu napriklad zbirku smittya Tak vizitnoyu kartkoyu S stali vrazlivosti tipu perepovnyuvannya bufera Pogana pidtrimka modulnosti Pidklyuchennya interfejsu zovnishnogo modulya cherez preprocesornu vstavku zagolovnogo fajlu include serjozno upovilnyuye kompilyaciyu pri pidklyuchenni velikoyi kilkosti moduliv Dlya usunennya cogo nedoliku bagato kompilyatoriv realizuyut mehanizm prekompilyaciyi zagolovnih fajliv angl Precompiled Headers Nedostacha informaciyi pro tipi danih pid chas kompilyaciyi CTTI Mova C ye skladnoyu dlya vivchennya i dlya kompilyaciyi Deyaki peretvorennya tipiv neintuyitivni Zokrema operaciya nad bezznakovim i znakovim chislami vidaye bezznakovij rezultat Preprocesor S uspadkovanij vid C duzhe primitivnij Ce privodit z odnogo boku do togo sho z jogo dopomogoyu ne mozhna abo vazhko zdijsnyuvati deyaki zavdannya metaprogramuvannya a z inshogo vnaslidok svoyeyi primitivnosti vin chasto privodit do pomilok i vimagaye bagato dij z obhodu potencijnih problem Deyaki movi programuvannya napriklad Scheme i Nemerle mayut nabagato mogutnishi i bezpechnishi sistemi metaprogramuvannya takozh zvani makrosami ale makrosi S S voni malo nagaduyut Z kincya 1990 h v spilnoti S nabulo poshirennya tak zvane metaprogramuvannya na bazi shabloniv Po suti vono vikoristovuye osoblivosti shabloniv C v cilyah realizaciyi na yihnij bazi interpretatora primitivnoyi funkcionalnoyi movi programuvannya sho vikonuyetsya pid chas kompilyaciyi Sama po sobi cya mozhlivist velmi privabliva ale vnaslidok vishezgadanogo takij kod velmi vazhko sprijmati i znevadzhuvati Movi Lisp Scheme Nemerle i deyaki inshi mayut mogutnishi i vodnochas prostishi dlya sprijnyattya pidsistemi metaprogramuvannya Krim togo v movi D realizovana porivnyanna za potuzhnistyu ale znachno prostisha v zastosuvanni pidsistema shablonnogo metaprogramuvannya Hocha deklaruyetsya sho S multiparadigmena mova realno v movi vidsutnya pidtrimka funkcionalnogo programuvannya Chastkovo danij propusk usuvayetsya riznimi bibliotekami Loki Boost sho vikoristovuyut zasobi metaprogramuvannya dlya rozshirennya movi funkcionalnimi konstrukciyami napriklad pidtrimkoyu lyambd anonimnih metodiv ale yakist podibnih rishen znachno postupayetsya yakosti vbudovanih u funkcionalni movi rishen Taki mozhlivosti funkcionalnih mov yak zistavlennya zi zrazkom vzagali ukraj skladno emulyuvati zasobami metaprogramuvannya Kritika movi C red C uspadkuvala bagato problem movi C Operaciya prisvoyuvannya poznachayetsya yak a operaciya porivnyannya yak Yih legko splutati i taka konstrukciya bude sintaksichno pravilnoyu ale privede do vazhkovlovimogo bagu Osoblivo chasto ce vidbuvayetsya v operatorah if i while napriklad programist mozhe napisati if i 0 zamist if i 0 Razom z tim osnovna masa kompilyatoriv vidaye v takih vipadkah poperedzhennya Uniknuti pomilku takogo tipu mozhna yaksho pisati vsi operaciyi porivnyannya u takomu viglyadi if 0 i Do togo zh bagato mov Bejsik Paskal vikoristovuyut simvol same v operaciyah porivnyannya Operaciyi prisvoyuvannya inkrementaciyi dekrementaciyi ta inshi povertayut znachennya U poyednanni z velikoyu kilkistyu operacij ce dozvolyaye ale ne zobov yazuye programista stvoryuvati kod sho vazhko chitayetsya Z inshogo boku odin z osnovnih principiv mov C i C dozvolyati programistovi pisati v bud yakomu stili a ne nav yazuvati horoshij stil Do togo zh ce inodi dozvolyaye kompilyatoru stvoryuvati optimalnishij kod Makrosi define ye potuzhnim ale nebezpechnim zasobom U movi C na vidminu vid C neobhidnist v nebezpechnih makrosah z yavlyayetsya znachno ridshe zavdyaki shablonam i vbudovanim funkciyam Ale v uspadkovanih standartnih S bibliotekah bagato potencijno nebezpechnih makrosiv Dehto vvazhaye nedolikom movi C vidsutnist sistemi zbirki smittya Z inshogo boku v C ye dostatno zasobiv klasi z konstruktorami i destruktorami standartni shabloni peredacha parametriv za posilannyam sho dozvolyayut majzhe viklyuchiti vikoristannya nebezpechnih vkazivnikiv A vidsutnist vbudovanoyi zbirki smittya dozvolyaye koristuvachevi samomu vibrati strategiyu upravlinnya resursami Krim togo avtomatichna zbirka smittya serjozno upovilnyuye robotu programi i ce nedolik tam de produktivnist ye kritichno vazhlivoyu Porivnyannya C z movami Java i C red Mova S z poyavoyu pershih translyatoriv znajshla vidrazu zh duzhe shiroke rozpovsyudzhennya na nij bulo stvoreno velicheznu kilkist program i zastosunkiv U miru nakopichennya dosvidu stvorennya velikih programnih sistem splivli nedoliki yaki sponukali do poshuku alternativnih rishen Takim alternativnim rishennyam stala mova Java yaka v deyakih galuzyah stala konkuruvati u populyarnosti z C a firma Majkrosoft zaproponuvala movu C yak novu movu sho rozvivaye principi C i sho vikoristovuye perevagi movi Java Nadali z yavilasya mova Nemerle sho ob yednuye perevagi C z mozhlivistyu funkcionalnogo programuvannya Ostannim chasom z yavilasya sproba ob yednannya efektivnosti C bezpeki i shvidkosti rozrobki yak v Java i C bula zaproponovana mova D yaka poki ne otrimala shirokogo viznannya Mova Java maye taki osoblivosti yakih nemaye v movi C Java ye tipobezpechnoyu movoyu Tipobezpeka garantuye vidsutnist u programah pomilok yaki vazhko znajti i yaki pov yazani z nepravilnoyu interpretaciyeyu pam yati komp yutera Ce robit proces rozrobki nadijnishim i peredbachuvanim a otzhe shvidshim Tak samo ce dozvolyaye zaluchati do rozrobki programistiv sho mayut menshu kvalifikaciyu i mati veliki grupi rozrobnikiv Java kod kompilyuyetsya spochatku ne v mashinnij kod a v pevnij promizhnij kod yakij nadali interpretuyetsya abo kompilyuyetsya todi yak bagato C kompilyatoriv oriyentovani na kompilyaciyu v mashinnij kod zadanoyi platformi U movi Java ye chitki pevni standarti na vvedennya vivedennya grafiku geometriyu dialog dostup do baz danih i inshih tipovih zastosuvan Zavdyaki cim osoblivostyam zastosunki na Java mayut znachno krashu krosplatformnist nizh S i chasto buduchi napisani dlya pevnogo komp yutera i operacijnoyi sistemi pracyuyut pid inshimi sistemami bez zmin Programisti sho pishut na movi Java ne zalezhat vid pakunkiv nav yazanih rozrobnikami kompilyatoriv na dane konkretne seredovishe sho rizko sproshuye portuvannya program U movi Java realizovano povnocinne zbirannya smittya yakogo nemaye v C Nemaye v S i zasobiv perevirki pravilnosti vkazivnikiv Z inshogo boku C volodiye naborom zasobiv konstruktori i destruktori standartni shabloni posilannya sho dozvolyayut majzhe povnistyu viklyuchiti vidilennya i zvilnennya pam yati vruchnu i nebezpechni operaciyi z vkazivnikami Prote take viklyuchennya vimagaye pevnoyi kulturi programuvannya todi yak v movi Java vono realizuyetsya avtomatichno Mova Java ye chisto ob yektno oriyentovanoyu todi yak C pidtrimuye yak ob yektno oriyentovane tak i procedurne programuvannya V C vidsutnya povnocinna informaciya pro tipi pid chas vikonannya RTTI Cyu mozhlivist mozhna bulo b realizuvati v C mayuchi povnu informaciyu pro tipi pid chas kompilyaciyi CTTI U C ye mozhlivist vvedennya priznachenogo dlya koristuvacha sintaksisu za dopomogoyu define sho mozhe privesti do togo sho moduli u velikih paketah program stayut silno pov yazani odin z odnim Ce rizko znizhuye nadijnist paketiv i mozhlivist organizaciyi rozdilenih moduliv Z inshogo boku S nadaye dostatno zasobiv konstanti shabloni vbudovani funkciyi dlya togo shob praktichno povnistyu viklyuchiti vikoristannya define Ci vidminnosti prizvodyat do zapeklih superechok mizh prihilnikami dvoh mov pro te yaka mova najkrasha Prihilniki Java vvazhayut ci osoblivosti perevagami prihilniki C vvazhayut sho u bagatoh vipadkah ci osoblivosti ye nedolikami zokrema Cinoyu perenosimosti ye vimoga nayavnosti na komp yuteri virtualnoyi Java mashini sho privodit do upovilnennya obchislen i praktichnoyi nemozhlivosti vikoristannya novih mozhlivostej aparatnoyi arhitekturi Avtomatichne zbirannya smittya prizvodit do vtrati kontrolyu zi storoni rozrobnrika sho mozhna bi bulo vikoristati dlya pokrashennya shvidkodiyi chi efektivnosti vikoristannya pam yati Standarti na grafiku dostup do baz danih tosho ye nedolikom yaksho programist hoche viznachiti svij vlasnij standart Vkazivniki u bagatoh vipadkah ye mogutnim abo navit neobhidnim zasobom a yihnye bezkontrolne vikoristannya nebezpechne lishe v nevmilih rukah Pidtrimka procedurnogo programuvannya ye korisnoyu Daleko ne vsi programisti ye prihilnikami odniyeyi z mov Na dumku deyakih programistiv Java i C ne ye konkurentami tomu sho mayut rizni galuzi zastosuvannya Inshi vvazhayut sho vibir movi dlya bagatoh zavdan ye pitannyam osobistogo smaku Deyaki arhitektori programnih rishen bazuyut svij vibir movi programuvannya dlya togo chi inshogo rishennya na osnovi silnih ta slabkih storin mov programuvannya tak zagalnomu konteksti rozrobki rishennya Primitki red a b Evolving a language in and for the real world C 1991 2006 Bjarne Stroustrup Arhiv originalu za 20 listopada 2007 Procitovano 20 listopada 2007 IEEE Spectrum opublikuvala rejting najpopulyarnishih mov programuvannya 2023 roku Avtor Artem Zhitkevich 30 08 2023 Specifikaciya C 0X prinyata v kachestve mezhdunarodnogo standarta C 11 Arhiv originalu za 27 listopada 2011 Procitovano 15 serpnya 2011 ISO IEC 14882 2014 Information technology Programming languages C ISO 14 sichnya 2014 Arhiv originalu za 29 sichnya 2017 Procitovano 29 sichnya 2020 Committee Draft Standard for Programming Language C PDF ISO 15 maya 2013 Arhiv originalu za 21 sichnya 2022 Procitovano 29 sichnya 2020 Sutter Herb 18 serpnya 2014 We have C 14 Arhiv originalu za 19 serpnya 2014 Procitovano 18 serpnya 2014 N4661 Editors Report Programming Languages C 21 bereznya 2017 Arhiv originalu za 4 lyutogo 2020 Procitovano 21 bereznya 2017 ISO IEC DIS 14882 Programming Languages C Arhiv originalu za 25 bereznya 2017 C 17 is formally approved Arhiv originalu za 29 sichnya 2020 Procitovano 29 sichnya 2020 ISO IEC 14882 2017 Arhiv originalu za 17 travnya 2013 Procitovano 29 sichnya 2020 Posilannya red isocpp org Arhivovano 14 lipnya 2018 u Wayback Machine domashnya storinka Standartu C v interneti novini status i obgovorennya C na usih kompilyatorah i platformah angl korisni resursi po C Arhivovano 26 listopada 2021 u Wayback Machine angl C reference Arhivovano 26 listopada 2021 u Wayback Machine angl Onlajn kursi red Bezplatnij kurs NVU dlya pochatkivciv vklyuchno z testami Arhivovano 25 lyutogo 2008 u Wayback Machine ros Bezplatnij kurs NVU dlya profesionaliv vklyuchno z testami ros pereklad Byerna Straustrupa Arhivovano 24 lyutogo 2008 u Wayback Machine ros Avtorskij kurs lekcij z S Aleksyeyeva Ye R Statti ta knigi red Osnovi movi programuvannya C Pidruchnik C v Vikipidruchniki Arhivovano 16 listopada 2021 u Wayback Machine Todd Veldhuizen Techniques for scientific C angl A Brief Look at C 0x by Bjarne Stroustrup Arhivovano 9 listopada 2020 u Wayback Machine angl Timothy A Budd C For Java Programmers 1 Arhivovano 25 bereznya 2013 u Wayback Machine Div takozh red C u sestrinskih Vikiproyektah nbsp Portal Programuvannya nbsp Teksti u Vikipidruchniku nbsp Fajli u Vikishovishi Operatori v C ta C Java C populyarni movi programuvannya stvoreni pid vplivom S Ob yektno oriyentovane programuvannya Shabloni C Otrimano z https uk wikipedia org w index php title C 2B 2B amp oldid 40775029