C plus plus valodas standarts. C plus plus valodas standarts C plus programmēšanas valoda

Grāmata ir ievads C++ programmēšanas valodā. Galvenā atšķirība starp šo grāmatu un iepriekšējiem C++ for Dummies izdevumiem ir tāda, ka šis izdevums no lasītāja neprasa nekādas papildu zināšanas, savukārt iepriekšējie izdevumi balstījās uz lasītāja zināšanām par C programmēšanas valodu, neskatoties uz materiāla izklāsta vienkāršību , grāmatā tas ir izklāstīts diezgan strikti, lai, ar šīs grāmatas palīdzību apguvis programmēšanas pamatus C++ valodā, lasītājs vairs nesastaptos ar grūtībām
turpmākās valodas apguves laikā.
Šī grāmata nemāca jums programmēt operētājsistēmai Windows vai izveidot skaistu interfeisu ar diviem peles klikšķiem; tajā sniegtais materiāls nav saistīts ar kādu konkrētu kompilatoru vai operētājsistēmu. Diez vai tā būs noderīga profesionālam programmētājam, taču, ja jūsu mērķis ir dziļas programmēšanas valodas zināšanas un nezināt, ar ko sākt, šī grāmata ir paredzēta jums.

Kas ir C++.
C++ ir objektorientēta zema līmeņa programmēšanas valoda, kas atbilst ANSI un Starptautiskās standartu organizācijas (ISO) standartiem. Objektorientētais C++ nozīmē, ka tas atbalsta programmēšanas stilu, kas padara lielapjoma programmas viegli kodējamas un paplašināmas. Tā kā C++ ir zema līmeņa valoda, tā var ģenerēt ļoti efektīvas, liela ātruma programmas.

Kā objektorientēta programmēšanas valoda C++ ir ļoti elastīga un paplašināma, padarot to piemērotu liela mēroga projektiem. Pašlaik C++ ir viena no populārākajām programmēšanas valodām jebkura veida lietojumprogrammu izstrādei. Lielākā daļa mūsdienu programmu, kas darbojas personālajos datoros, ir rakstītas C++ valodā.

SATURS
SATURS 6
Ievads 17
1. daļa. Pirmā iepazīšanās ar C++ 23
1. nodaļa: Pirmās programmas rakstīšana 25
2. nodaļa. Mainīgo deklarēšanas gudrība 41
3. nodaļa: matemātikas izpilde 50
4. nodaļa: Loģisko darbību veikšana 55
5. nodaļa. Programmas vadības paziņojumi 66
2. daļa. Kļūt par funkcionāliem programmētājiem 79
6. nodaļa: Funkciju izveide 81
7. nodaļa. Secību saglabāšana masīvos 92
8. nodaļa. Darba sākšana ar rādītājiem programmā C++ 105
9. nodaļa. Otrā iepazīšanās ar rādītājiem 117
10. nodaļa. C++ programmu atkļūdošana 128
3. daļa: Ievads 143. klasē
11. nodaļa: Ievads objektorientētā programmēšanā 145
12. nodaļa. Nodarbības C++ 149
13. nodaļa. Darbs ar klasēm 154
14. nodaļa. Rādītāji uz objektiem 167
15. nodaļa. Aizsargātās klases dalībnieki: Netraucēt! 181
16. nodaļa. Objektu izveide un dzēšana 188
17. nodaļa. Dizaina argumentācija 198
18. nodaļa. 213. kopiju konstruktors
Nodaļa 19. Statiskie locekļi 224
4.daļa. Mantojums 231
20. nodaļa. Šķiras mantojums 233
21. nodaļa. Ievads virtuālo dalībnieku funkcijām: vai tās ir īstas 240
22. nodaļa. Klašu dekompozīcija 249
5. daļa. Noderīgas iespējas 269
23. nodaļa. Uzdevuma operators 271
24. nodaļa: I/O straumju izmantošana 277
25. nodaļa: Kļūdu un izņēmumu apstrāde 290
26. nodaļa. Daudzkārtēja mantošana 298
27. nodaļa. C++ veidnes 308
28. nodaļa. Standarta veidņu bibliotēka 317
6. daļa. Lieliskais desmitnieks 329
29. nodaļa. Desmit veidi, kā izvairīties no kļūdām 331
30. nodaļa. Dev-C++ 336 desmit populārākās funkcijas
31. nodaļa. BUDŽETS 343 Programma
Pieteikums. Komplektā iekļautā kompaktdiska 379 saturs
Piktogrammas
Priekšmeta rādītājs 380.


Lejupielādējiet e-grāmatu bez maksas ērtā formātā, skatieties un lasiet:
Lejupielādējiet grāmatu C++ for Dummies, Stefan Randy Davis - fileskachat.com, ātri un bez maksas lejupielādējiet.

C valodu izstrādāja Deniss Ričijs un Braiens Kernigans no 1969. līdz 1973. gadam. C bija paredzēts UNIX operētājtīkla ieviešanai, taču vēlāk tas atrada plašākas pielietojuma iespējas.

Šobrīd Sji ieņem stabilu otro vietu.

Kāpēc jums ir nepieciešams C?

Mēs jau esam runājuši par C valodas nozīmi, tāpēc apskatīsim galvenos punktus.

Sākumā lielākā daļa sistēmas programmatūras ir rakstītas C valodā. Populārākā atvērtā pirmkoda Linux OS kodols tika uzrakstīts C valodā.

Liela C priekšrocība ir tā, ka katra valodas instrukcija tiek tulkota mašīnkodā tiešā un saprotamā veidā. Tiek izpildīts tieši tas kods, ko programmētājs redz ekrānā. Tomēr mūsdienu kompilatoros, protams, tos var izmantot, bet retāk.

Ir arī vērts atzīmēt, ka populārākās programmēšanas valodas vienā vai otrā veidā ir saistītas ar C. Tā, piemēram, Java un C# ir tā sauktā C veida sintakse, un C++ un Objective-C vienā vai otrā veidā ir C paplašinājumi.

Ja rakstāt kodu jebkurā dinamiskā programmēšanas valodā, neatkarīgi no tā, vai tā ir PHP, JavaScript vai Python, tad tā tulks, izpildlaiks un lielākā daļa bibliotēku galvenokārt tiek rakstītas C valodā. Tāpēc, lai izprastu konkrētas valodas uzvedības iezīmes, ir jāzina C valodas iezīmes. Un, ja esat pārspējis savas programmēšanas valodas iespējas, tad, pirms jūs to zināt, jūs sāksit rakstīt jaunu paplašinājumu valodā C.

Turklāt C valodas zināšanas ļauj programmētājam patiesi novērtēt visus augsta līmeņa programmēšanas valodu jaukumus, kā arī ierobežojumus, kas rodas to lietošanā.

Un šie ir iemesli, kāpēc mācīties C.

Ko tālāk?

Tagad, kad esam sapratuši, kāpēc mums ir nepieciešams C, rodas loģisks jautājums: "Kā to iemācīties?"

Grāmata "C programmēšanas valoda"

Neviens nevar pastāstīt par C labāk kā šīs programmēšanas valodas radītāji. Tāpēc grāmata “C programmēšanas valoda”, ko sarakstījuši Deniss Ričijs un Braiens Kernihans, ir obligāta ikvienam, kurš kaut kā nolēmis savu dzīvi saistīt ar C.

Kurss “Pilnīgs C izstrādātāju kurss — izveidojiet 7 aizraujošus projektus”

Kurss aptver gan pamata valodas aspektus, gan progresīvākus: grafisko programmēšanu, atmiņas modeļus un daudz ko citu. Kursa laikā veidosi 7 aizraujošus projektus, piemēram, datu bāzes pārvaldības sistēmu un savu datorvīrusu.

Kurss ir apmaksāts, bet tas noteikti ir naudas vērts. Tālāk mēs piedāvājam bezmaksas materiālus.

Slavenais Hārvardas kurss "CS50"

Tagad viņš runā. Pats galvenais, CS50 iemācīs jums domāt. Dažas no tēmām, kuras apskatīsit kursa laikā, ir abstrakcija, algoritmi, datu struktūras, iekapsulēšana, resursu pārvaldība, drošība, programmatūras izstrāde un tīmekļa izstrāde. Valodas, kuras izmantosit, ir C, Python, SQL un JavaScript, kā arī HTML un CSS. Un pats galvenais, kurss ir bezmaksas.

Bezmaksas kurss “C apmācība iesācējiem”

Izmantojot šo programmu, jūs apgūsit C valodas pamatus, sapratīsit norādes, struktūras un savienojumus, kā arī iemācīsities rakstīt vienkāršas programmas.

Bezmaksas tiešsaistes C kursi no divām vadošajām Somijas universitātēm

Ietver visaptverošus materiālus un daudzus programmēšanas vingrinājumus, kā arī automatizētu testēšanas sistēmu.

Kursu kopīgi izstrādāja Aalto universitāte un Helsinku Universitāte (tā pati, kurā savulaik mācījās Linuss Torvalds), un tajā izskaidrotais materiāls pilnībā dublē šajās universitātēs mācītos C kursus.

Grāmata “Mācieties C grūtajā ceļā”

Grāmata iemācīs C, ko izmanto reālajā dzīvē, lai radītu reālus projektus, nevis abstraktus mehānismus un pedantisku teoriju. Jūs apgūsit arī vairākas svarīgas tēmas, piemēram, algoritmus un datu struktūras un automatizēto testēšanu. Interesenti var atrast tā tulkojumu krievu valodā. Tproger arī bieži iesaka labas programmēšanas grāmatas, tāpēc pārbaudiet

C programmēšanas valodas popularitāti ir grūti pārvērtēt, īpaši atgādinot tās pagātnes sasniegumus. Droši vien katrs izstrādātājs vismaz zina par tā esamību un, maksimums, ir mēģinājis tajā programmēt. C ir tādu valodu kā C++, Objective-C, C#, Java priekštecis.

Microsoft izvēlējās C ​​veida sintaksi, lai izstrādātu dzimto valodu savai .Net platformai. Turklāt daudzas operētājsistēmas ir rakstītas C valodā.

Protams, C nav ideāls: valodas veidotāji Kens Tompsons un Deniss Ričijs pavadīja ilgu laiku, lai to pilnveidotu. C standartizācija joprojām turpinās. Tas pastāv jau vairāk nekā 45 gadus un tiek aktīvi izmantots.

Tas bieži tiek saistīts ar nevis vienu, bet divām programmēšanas valodām - C/C++. Tomēr tālāk mēs īpaši runāsim par “tīro” C.

C valodas saknes meklējamas ALGOL (ALGorithmic Language), ko 1958. gadā izveidoja Eiropas un Amerikas datorzinātnieku komiteja sanāksmē ETH Cīrihē. Valoda bija atbilde uz dažiem FORTRAN valodas trūkumiem un mēģinājums tos labot. Turklāt C izstrāde ir cieši saistīta ar UNIX operētājsistēmas izveidi, pie kuras strādāja arī Kens Tompsons un Deniss Ričijs.

UNIX

MAC (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) projekts sākās kā tīri pētniecības projekts MIT 1963. gadā.

MAC projekta ietvaros tika izstrādāta CTSS (Compatible Time-Sharing System) operētājsistēma. 60. gadu otrajā pusē tika izveidotas vairākas citas laika dalīšanas sistēmas, piemēram, BBN, DTSS, JOSS, SDC un Multiplexed Information and Computing Service (MULTICS), cita starpā.

Multics ir MIT, Bell Telephone Laboratories (BTL) un General Electric (GE) kopīgs darbs, lai izveidotu laika dalīšanas operētājsistēmu datoram GE-645. Pēdējais dators, kurā darbojas Multics, tika izslēgts 2000. gada 31. oktobrī.

Taču BTL no šī projekta atteicās 1969. gada sākumā.

Daži viņa darbinieki (Kens Tompsons, Deniss Ričijs, Stū Feldmens, Dags Makilrojs, Bobs Moriss, Džo Ossanna) vēlējās darbu turpināt paši. Tompsons strādāja pie spēles Space Travel uz GE-635. Vispirms tas tika uzrakstīts Multics, un pēc tam tika pārrakstīts Fortran, izmantojot GECOS uz GE-635. Spēlē tika simulēti Saules sistēmas ķermeņi, un spēlētājam bija jānolaiž kuģis kaut kur uz planētas vai satelīta.

Ne šī datora programmatūra, ne aparatūra nebija piemērota šādai spēlei. Tompsons meklēja alternatīvu un pārrakstīja spēli uz pamestu PDP-7. Atmiņa bija 8K 18 bitu vārdi, un tajā bija arī vektoru displeja procesors, lai parādītu skaistas grafikas tajā laikā.


Attēls no slideshare.net

Thompson un Ritchie veica visu GE cross-assembler izstrādi un pārsūtīja kodu uz perforētām lentēm. Tompsonam tas ļoti nepatika un viņš sāka rakstīt OS priekš PDP-7, sākot ar failu sistēmu. Tā radās UNIX.

Tompsons vēlējās izveidot ērtu skaitļošanas vidi, kas veidota atbilstoši viņa projektam, izmantojot visus pieejamos līdzekļus. Viņa idejas, acīmredzot retrospektīvi, ietvēra daudzus Multics jauninājumus, tostarp procesa koncepciju kā pārvaldības pamatu, uz koku balstītu failu sistēmu, komandu tulku kā lietotāja programmu, vienkāršotu teksta failu attēlojumu un vispārēju piekļuvi ierīces.

PDP-7 UNIX iezīmēja arī augsta līmeņa B valodas sākumu, ko ietekmēja BCPL valoda. Deniss Ričijs teica, ka B ir C bez tipiem. BCPL ietilpa 8 KB atmiņā, un Thompson to rūpīgi pārveidoja. B pamazām uzauga S.


Attēls no it-world.com

Līdz 1973. gadam C valoda bija kļuvusi pietiekami spēcīga, lai liela daļa UNIX kodola, kas sākotnēji tika rakstīts montāžas valodā PDP-11/20, tika pārrakstīta C valodā. Tas bija viens no pirmajiem operētājsistēmas kodoliem, kas rakstīts valodā, kas nav montāžas valoda.

Izrādās, ka C ir “saistīts produkts”, kas iegūts UNIX operētājsistēmas izveides laikā.

Sji senči

Iedvesmojoties no valodas ALGOL-60, Kembridžas Universitātes Matemātikas laboratorija kopā ar Londonas Universitātes Datoru nodaļu 1963. gadā izveidoja CPL (kombinētās programmēšanas valodas) valodu.

CPL valoda tika uzskatīta par sarežģītu, un, reaģējot uz to, Martins Ričardsons 1966. gadā izveidoja BCPL valodu, kuras galvenais mērķis bija rakstīt kompilatorus. Mūsdienās tas praktiski netiek lietots, taču savulaik tam bija liela nozīme labās pārnesamības dēļ.

BCPL 1970. gadu sākumā tika izmantots vairākos interesantos projektos, tostarp operētājsistēmā OS6 un daļēji Xerox PARC topošajās izstrādēs.

BCPL kalpoja kā priekštecis valodai Bi (B), kas tika izstrādāta 1969. gadā jau pazīstamajā AT&T Bell Telephone Laboratories, ne mazāk pazīstama Kenam Tompsonam un Denisam Ričijam.

Tāpat kā citas tā laika operētājsistēmas, UNIX tika rakstīts montāžas valodā. Programmu atkļūdošana montētājā ir patiesas sāpes. Tompsons nolēma, ka OS tālākai attīstībai ir nepieciešama augsta līmeņa valoda, un nāca klajā ar mazu valodu B. Tompsons par pamatu ņēma BCPL valodu. Valodu B var uzskatīt par C bez veidiem.

BCPL, B un C sintaktiski atšķiras daudzās detaļās, taču būtībā tās ir līdzīgas. Programmas sastāv no globālo deklarāciju un funkciju (procedūru) deklarāciju secības. BCPL procedūras var būt ligzdotas, taču tās nevar atsaukties uz nestatiskiem objektiem, kas definēti to saturošajās procedūrās. B un C izvairās no šī ierobežojuma, ieviešot stingrāku ierobežojumu: ligzdotu procedūru nav vispār. Katra no valodām (izņemot vecākās B versijas) atbalsta atsevišķu kompilāciju un nodrošina iespēju iekļaut tekstu no nosauktajiem failiem.

Atšķirībā no plaši izplatītajām sintakses izmaiņām, kas radās B izveides laikā, BCPL galvenā semantika — tā tipa struktūra un izteiksmes novērtēšanas noteikumi — palika neskarta. Abas valodas ir bez veida vai drīzāk tām ir viens datu tips - “vārds” vai “šūna”, noteikta garuma bitu kopa. Atmiņa šajās valodās ir šādu šūnu masīvs, un šūnas satura nozīme ir atkarīga no tai piemērotās darbības. Piemēram, operators "+" vienkārši pievieno savus operandus, izmantojot pievienošanas mašīnas instrukciju, un arī citas aritmētiskās darbības ir vienaldzīgas pret to operandu nozīmi.

Ne BCPL, ne B, ne C nepiešķir rakstzīmju datus valodā; viņi uzskata virknes kā veselu skaitļu vektorus un papildina vispārīgos noteikumus ar vairākām konvencijām. Gan BCPL, gan B virknes literāls nozīmē statiskā apgabala adresi, kas inicializēta ar šūnās iesaiņotām virknes rakstzīmēm.

Kā tika izveidots C

1970. gadā uzņēmums Bell Labs projekta vajadzībām iegādājās datoru PDP-11. Tā kā B bija gatavs darbam ar PDP-11, Tompsons pārrakstīja UNIX daļu B.

Bet modelis B un BCPL paredzēja papildu izmaksas, strādājot ar rādītājiem: valodas noteikumi, kas definēja rādītāju kā indeksu vārdu masīvā, padarīja norādes par vārdu indeksiem. Katra rādītāja piekļuve izpildes laikā ģenerēja rādītāja mērogošanu līdz baita adresei, ko procesors gaidīja.

Līdz ar to kļuva skaidrs, ka, lai tiktu galā ar rakstzīmju un baitu adresēšanu, kā arī sagatavotos gaidāmajam aparatūras atbalstam peldošā komata aprēķiniem, bija nepieciešama rakstīšana.

1971. gadā Ričijs sāka veidot B paplašinātu versiju. Sākumā viņš to nosauca par NB (New B), bet, kad valoda ļoti atšķīrās no B, nosaukums tika nomainīts uz C. Lūk, ko par to rakstīja pats Ričijs:

Es gribēju, lai struktūra ne tikai raksturotu abstraktu objektu, bet arī aprakstītu bitu kopu, ko var nolasīt no direktorija. Kur kompilators varētu paslēpt semantikas prasīto vārda rādītāju? Pat ja struktūras būtu paredzētas abstraktākas un vieta rādītājiem varētu būt kaut kur paslēpta, kā es atrisinātu tehnisko problēmu, kā pareizi inicializēt šīs norādes, piešķirot atmiņu sarežģītam objektam, iespējams, struktūrai, kurā ir masīvi, kas satur struktūras utt. patvaļīgā dziļumā?

Risinājums bija izšķirošs lēciens evolūcijas ķēdē starp beztipa BCPL un drukātu C. Tas novērsa rādītāja materializāciju krātuvē un tā vietā izraisīja tā izveidošanu, kad izteiksmē tika minēts masīva nosaukums. Noteikums, kas turpinās mūsdienu C versijā, ir tāds, ka masīva vērtības, ja uz tām ir atsauce izteiksmē, tiek pārveidotas par norādes uz pirmo no objektiem, kas veido šo masīvu.

Otrs jauninājums, kas visskaidrāk atšķir C no tā priekšgājējiem, ir pilnīgākā tipa struktūra un jo īpaši tās izteiksmīgums deklarācijas sintaksē. NB piedāvāja pamattipus int un char, kā arī to masīvus un norādes uz tiem, taču citu veidu, kā tos izveidot.

Bija nepieciešams vispārinājums: jebkura veida objektam vajadzētu būt iespējai aprakstīt jaunu objektu, kas apvieno vairākus šādus objektus masīvā, saņem to no funkcijas vai ir rādītājs uz to.



Attēls no The C Language: M. Waite, S. Prata, D. Martin

Jebkuram šāda saliktā tipa objektam jau bija veids, kā norādīt uz objektu, kas ir tā daļa: indeksēt masīvu, izsaukt funkciju, ar rādītāju izmantot indirection operatoru. Līdzīga argumentācija noveda pie sintakses nosaukumu deklarēšanai, kas atspoguļo izteiksmes sintaksi, kurā šie nosaukumi tiek izmantoti. Tātad

deklarē veselu skaitli, rādītāju uz veselu skaitli un rādītāju uz rādītāju uz veselu skaitli. Šo deklarāciju sintakse atspoguļo faktu, ka i, *pi un **ppi, izmantojot izteiksmē, tiek ievadīts tips int. Līdzīgā veidā
deklarēt funkciju, kas atgriež veselu skaitli, funkciju, kas atgriež rādītāju uz veselu skaitli, rādītāju uz funkciju, kas atgriež veselu skaitli;
deklarēt rādītāju masīvu uz veselu skaitli, rādītāju uz veselu skaitļu masīvu.

Visos šajos gadījumos mainīgā deklarēšana atgādina tā lietošanu izteiksmē, kuras veids ir neatkarīgi no deklarācijas sākuma.

70. gadi: “nelaimju laiks” un viltus dialekti

Līdz 1973. gadam valoda bija kļuvusi pietiekami stabila, lai UNIX varētu tajā pārrakstīt. Pārslēgšanās uz C sniedza svarīgu priekšrocību: pārnesamību. Uzrakstot C kompilatoru katrai no Bell Labs iekārtām, izstrādes komanda varētu tām portēt UNIX.

Attiecībā uz C valodas rašanos Pīters Moilans savā grāmatā “Lieta pret C” raksta: “Bija vajadzīga valoda, kas varētu apiet dažus stingros noteikumus, kas ir iebūvēti lielākajā daļā augsta līmeņa valodu, un nodrošināt to. uzticamība. Mums bija vajadzīga valoda, kas ļautu mums darīt to, ko līdz šim varēja izdarīt tikai montāžas valodā vai mašīnkoda līmenī.

C turpināja attīstīties 70. gados. 73.–80. gados valoda nedaudz pieauga: tipveida struktūra saņēma neparakstītus, garus tipus, savienību un uzskaitījumu, struktūras kļuva tuvas klases objektiem (trūka tikai burtu apzīmējuma).

Pirmā grāmata par C. C programmēšanas valoda, ko sarakstījuši Braiens Kernigans un Deniss Ričijs un kas publicēta 1978. gadā, ir kļuvusi par C programmētāju Bībeli. Tā kā nav oficiāla standarta, šī grāmata - pazīstama arī kā K&R vai "Baltā grāmata", kā C fani to labprāt sauc - ir kļuvusi par de facto standartu.


Attēls no learningc.info

70. gados bija maz C programmētāju, un lielākā daļa no tiem bija UNIX lietotāji. Tomēr 80. gados C pārcēlās ārpus UNIX pasaules šaurajām robežām. C kompilatori ir kļuvuši pieejami dažādās iekārtās, kurās darbojas dažādas operētājsistēmas. Jo īpaši C sāka izplatīties strauji augošajā IBM PC platformā.

K&R ieviesa šādas valodas funkcijas:

Struktūras (datu tips struct);
garš vesels skaitlis (long int datu tips);
unsigned integer (datu tips unsigned int);
operators += un tamlīdzīgi (vecie operatori =+ sajauca C kompilatora leksisko analizatoru, piemēram, salīdzinot izteiksmes i =+ 10 un i = +10).

K&R C bieži tiek uzskatīta par vissvarīgāko valodas daļu, kas jāatbalsta C kompilatoram. Daudzus gadus, pat pēc ANSI C izlaišanas, tas tika uzskatīts par minimālo līmeni, kas būtu jāievēro programmētājiem, kuri vēlējās maksimālu pārnesamību no savām programmām, jo ​​ne visi kompilatori tad atbalstīja ANSI C, un labs K&R C kods bija pareizs ANSI C. .

Līdz ar popularitātes pieaugumu radās problēmas. Programmētāji, kuri rakstīja jaunus kompilatorus, par pamatu ņēma K&R aprakstīto valodu. Diemžēl K&R dažas valodas iezīmes bija aprakstītas neskaidri, tāpēc sastādītāji tās bieži interpretēja pēc saviem ieskatiem. Turklāt grāmatā nebija skaidri nošķirtas valodas iezīmes un UNIX operētājsistēmas iezīmes.

Kopš K&R C publicēšanas valodai ir pievienotas vairākas funkcijas, ko atbalsta AT&T un dažu citu ražotāju kompilatori:

Funkcijas, kas neatgriež vērtību (tips void) un norādes, kurām nav tipa (type void *);
funkcijas, kas atgriež arodbiedrības un struktūras;
šo struktūru lauku nosaukumi katrai struktūrai dažādās nosaukumu telpās;
struktūras uzdevumi;
konstante precizētājs (const);
standarta bibliotēka, kas realizē lielāko daļu dažādu ražotāju ieviesto funkciju;
enum veids (enum);
viens precīzs daļskaitlis (pludiņš).

Situāciju pasliktināja tas, ka pēc K&R izdošanas C turpināja attīstīties: tam tika pievienotas jaunas funkcijas un no tā tika izgrieztas vecās. Drīz vien radās acīmredzama nepieciešamība pēc visaptveroša, precīza un mūsdienīga valodas apraksta. Bez šāda standarta sāka parādīties valodas dialekti, kas traucēja pārnesamībai – valodas lielākajam spēkam.

Standarti

70. gadu beigās C valoda sāka aizstāt BASIC, kas tajā laikā bija mikrodatoru programmēšanas līderis. Astoņdesmitajos gados tas tika pielāgots IBM-PC arhitektūrai, kas izraisīja ievērojamu tā popularitātes lēcienu.

Amerikas Nacionālais standartu institūts (ANSI) sāka izstrādāt C valodas standartu. Viņa vadībā 1983. gadā tika izveidota X3J11 komiteja, kas sāka izstrādāt standartu. Pirmā standarta versija tika izlaista 1989. gadā, un to sauca par C89. 1990. gadā pēc nelielu izmaiņu veikšanas standartā to pieņēma Starptautiskā standartizācijas organizācija ISO. Tad tas kļuva zināms ar kodu ISO/IEC 9899:1990, bet programmētāju vidū iestrēga nosaukums, kas saistīts ar standarta pieņemšanas gadu: C90. Jaunākā standarta versija ir ISO/IEC 9899:1999, kas pazīstama arī kā C99, kas tika pieņemta 2000. gadā.

No C99 standarta jauninājumiem ir vērts pievērst uzmanību izmaiņām noteikumā par mainīgo lielumu deklarēšanas vietu. Tagad jaunus mainīgos var deklarēt koda vidū, nevis tikai saliktā bloka sākumā vai globālajā tvērumā.

Dažas C99 funkcijas:

Iekļautās funkcijas (inline);
lokālo mainīgo deklarēšana jebkurā programmas teksta priekšrakstā (kā C++);
jauni datu tipi, piemēram, long long int (lai atvieglotu pāreju no 32 bitu skaitļiem uz 64 bitu skaitļiem), tiešais Būla datu tips _Bool un kompleksais tips komplekso skaitļu attēlošanai;
mainīga garuma masīvi;
atbalsts ierobežotām norādēm (ierobežot);
nosaukta struktūru inicializācija: struct ( int x, y, z; ) punkts = ( .y=10, .z=20, .x=30 );
atbalsts vienas rindiņas komentāriem, kas sākas ar //, aizgūti no C++ (daudzi C kompilatori tos iepriekš atbalstīja kā papildinājumu);
vairākas jaunas bibliotēkas funkcijas, piemēram, snprintf;
vairāki jauni galvenes faili, piemēram, stdint.h.

C99 standartu tagad vairāk vai mazāk atbalsta visi mūsdienu C kompilatori. Ideālā gadījumā kods, kas rakstīts C valodā saskaņā ar standartiem un neizmantojot aparatūru un no sistēmas atkarīgus zvanus, kļuva par aparatūras un platformas neatkarīgu kodu.

2007. gadā tika uzsākts darbs pie nākamā C valodas standarta. 2011. gada 8. decembrī tika publicēts jauns C valodas standarts (ISO/IEC 9899:2011). Dažas jaunā standarta funkcijas jau atbalsta GCC un Clang kompilatori.

Galvenās C11 iezīmes:

Daudzpavedienu atbalsts;
uzlabots Unicode atbalsts;
vispārināti makro (tipa vispārīgas izteiksmes, pieļauj statisku pārslodzi);
anonīmas struktūras un savienības (vienkāršo piekļuvi ligzdotām struktūrām);
objektu izlīdzināšanas kontrole;
statiski apgalvojumi;
bīstamo izpaužas funkcijas noņemšana (par labu seifam gets_s);
funkcija quick_exit;
funkcijas precizētājs _Noreturn;
jauns ekskluzīvs failu atvēršanas režīms.

Neskatoties uz '11 standarta esamību, daudzi kompilatori joprojām pilnībā neatbalsta pat C99 versijas.

Kāpēc Sji tiek kritizēts

Tai ir diezgan augsta barjera ienākšanai, kas apgrūtina tās izmantošanu mācībās kā pirmo programmēšanas valodu. Programmējot C valodā, ir jāņem vērā daudzas detaļas. "Dzimis no hakeru fona, tas veicina programmēšanas stilu, kas bieži vien ir nedrošs, un mudina rakstīt sarežģītu kodu," raksta Wikipedia.

Pīters Moilans izteica dziļāku un pamatotāku kritiku. Sji kritizēšanai viņš veltīja 12 lappuses. Šeit ir daži fragmenti:

Problēmas ar modularitāti
Moduļu programmēšana C valodā ir iespējama, bet tikai tad, ja programmētājs ievēro vairākus diezgan stingrus noteikumus:

Katram modulim ir jābūt tieši vienam galvenes failam. Tajā jāiekļauj tikai eksportējami funkciju prototipi, apraksti un nekas cits (izņemot komentārus).

Ārējās izsaukšanas procedūrai par šo moduli ir jāzina tikai galvenes faila komentāri.

Lai pārbaudītu integritāti, katram modulim ir jāimportē savs galvenes fails.

Lai importētu informāciju no cita moduļa, katrā modulī ir jābūt #include rindiņām, kā arī komentāriem, kas norāda, kas tiek importēts.

Funkciju prototipus var izmantot tikai galvenes failos. (Šis noteikums ir nepieciešams, jo C valodai nav mehānisma, lai pārbaudītu, vai funkcija ir ieviesta tajā pašā modulī, kurā ir tās prototips; tāpēc prototipa izmantošana var maskēt "trūkstošās funkcijas" kļūdu.)

Jebkurš globālais mainīgais modulī un jebkura funkcija, kas nav importēta, izmantojot galvenes failu, ir jāpaziņo par statisku.

Jānorāda kompilatora brīdinājums “funkciju izsaukums bez prototipa”; šāds brīdinājums vienmēr jāuzskata par kļūdu.

Programmētājam ir jāpārliecinās, ka katrs galvenes failā norādītais prototips atbilst ne-privātai (t.i., nestatiskai parastai C terminoloģijā) funkcijai, kas ir ieviesta ar tādu pašu nosaukumu tajā pašā modulī. Diemžēl C valodas raksturs padara automātisku pārbaudi par neiespējamu.

Jums vajadzētu būt aizdomām par jebkuru grep lietošanu. Ja prototips nav īstajā vietā, visticamāk, tā ir kļūda.

Ideālā gadījumā programmētājiem, kas strādā vienā komandā, nevajadzētu piekļūt vienam otra avota failiem. Viņiem vajadzētu koplietot tikai objektu moduļus un galvenes failus.

Acīmredzamās grūtības ir tādas, ka daži cilvēki ievēros šos noteikumus, jo kompilators neprasa tos stingri ievērot. Moduļu programmēšanas valoda vismaz daļēji aizsargā labus programmētājus no haosa, ko rada slikti programmētāji. Bet C valoda to nevar izdarīt.



Attēls no smartagilee.com
Problēmas ar rādītājiem
Neskatoties uz visiem sasniegumiem datu struktūru teorijā un praksē, norādes joprojām ir īsts programmētāju klupšanas akmens. Darbs ar norādēm veido ievērojamu daļu laika, kas pavadīts programmas atkļūdošanai, un tieši tās rada lielāko daļu problēmu, kas sarežģī tās izstrādi.

Varat atšķirt svarīgas norādes no nesvarīgām. Mūsu izpratnē svarīgs rādītājs ir datu struktūras izveidei un uzturēšanai.

Rādītājs tiek uzskatīts par nesvarīgu, ja nav nepieciešams ieviest datu struktūru. Tipiskā C programmā ir daudz vairāk nesvarīgu norāžu nekā svarīgu. Tam ir divi iemesli.

Pirmais ir tas, ka programmētāju vidū, kuri izmanto C valodu, ir kļuvusi par tradīciju izveidot norādes pat tur, kur jau pastāv citas piekļuves metodes, kas nekādā ziņā nav zemākas par tām, piemēram, skatot masīva elementus.

Otrs iemesls ir C valodas noteikums, saskaņā ar kuru visi funkciju parametri ir jānodod pēc vērtības. Ja jums ir nepieciešams Pascal VAR vai Ada inout ekvivalents, vienīgais risinājums ir rādīt rādītāju. Tas lielā mērā izskaidro C programmu slikto lasāmību.

Situācija pasliktinās, ja ir nepieciešams nodot svarīgu rādītāju kā ievades/izvades parametru. Šajā gadījumā funkcija ir jānodod rādītājam rādītājam, kas rada grūtības pat pieredzējušākajiem programmētājiem.

Si - dzīvs

Saskaņā ar 2016. gada jūnija datiem TIOBE indekss, kas mēra programmēšanas valodu popularitātes pieaugumu, uzrādīja, ka C ieņem 2. vietu:

Lai kāds saka, ka C ir novecojis, ka tā plašā izmantošana ir veiksmes un aktīvas PR sekas. Lai kāds saka, ka bez UNIX C valoda nekad nebūtu izveidota. Pievienojiet atzīmes

LIRISKAIS IEVADS.
Datorzinātņu fakultātē ir tāds priekšmets: YaSiTP (C valoda un programmēšanas teorija). ISIT studenti to apgūst trešajā kursā un, kā likums, īpašu problēmu ar to nesagādā. un nelaimīgie studenti ar IC ir spiesti ar to sākt mācīties programmēšanu - jau no pirmajām universitātē pavadītajām nedēļām. viss būtu kārtībā - ja skolēns skolā kaut nedaudz pamācītos informātiku un labi pazīst Paskālu - viņš iemācīsies sintaksi un turpinās vadīties pēc valodas un diskrētās valodas. ko darīt, ja neesi mācījis un nezini? tas ir, pat pilnībā?
tad tavs bizness ir miskasts\slikts.
pirmkārt: neguli Hļebostrojeva lekciju laikā. nav grūtāka uzdevuma kā neaizmigt viņa izmērītā balsī uz ceturtā pāra, bet... viss ir atkarīgs no tevis paša.
otrkārt: sāc lasīt grāmatu, piemēram http://www.ph4s.ru/bookprogramir_1.html tur atradīsi Bogatyreva grāmatu “pilnīgs idiota ceļvedis programmēšanai” vai ko citu pēc savas gaumes.
trešais un, iespējams, vissvarīgākais: PRAKSE. par ko es runāšu.
Pirms mēģināt kaut ko rakstīt mājās, jums ir jāiekārto pareizā studija. Balstoties uz gandrīz visu MKN 2012 pieredzi, Vidul Studio 2010 C++ Express komplekts nedarbojas. To, kas augstskolā ir IDEĀLI rakstīts uz datoriem, viņa nolasa ar kļūdu bez labošanas iespējām. kāpēc tas nav mūsu bizness, mēs meklējam Visual Studio 2010 (2012) Ultimate (Visual Studio Ultimate 2012). piemēram šeit: http://www.microsoft.com/visualstudio/ru... . Mēs instalējam izmēģinājuma versiju, pēc kuras jūs varat sākt praktizēt.

(1. piezīme:
fails - papildu saglabāšanas parametri - kirilica doc. tad konsole normāli lasīs krievu burtus.

PIEZĪME2: lai iegūtu pilnvērtīgu programmu no uzrādītā koda, programmā Visual Studio ir jāizveido jauns projekts, jāizvēlas vienums “tukšs projekts”, jānorāda projekta nosaukums, mapē “avota koda faili”, pa labi -noklikšķiniet, lai pievienotu jaunu elementu “C++ file”, iekopējiet manu kodu iegūtajā logā un kompilējiet to (vadības taustiņi + F5), un pēc tam mēģiniet pats uzrakstīt kaut ko līdzīgu.)

PRAKSE.
Programmēšana klasiski sākas ar pamata programmas "sveika pasaule!"
Forumā ir vairāki pavedieni par šo programmu dažādās valodās, izņemot C++, tāpēc šeit ir kods:

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

Ir arī noderīgi uzrakstīt pāris vienkāršas šāda veida programmas (piemēram, šī parāda vienādojuma rezultātu ar iepriekš zināmiem datiem):

// tytytyty.cpp: definē konsoles lietojumprogrammas ievades punktu. // #iekļaut "stdafx.h" int _tmain(int argc, _TCHAR* argv) ( int x , y , z; x = 9; y = 4; z = x*y; printf("%d", z) ;)

tad sarežģītāk (šī programma nolasa divas ievades vērtības un dod vienādojuma rezultātu ar ievadītajām vērtībām):

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

nākamā skolotāja sniegtā programma pēc “sveika pasaule!” man izskatījās šādi:
nosacījums: dots kvadrāts un tajā ierakstīts aplis. atrodiet pusi no kvadrāta laukuma, kas paliek ārpus apļa, ja ir zināma kvadrāta mala.
risinājums:

#include "stdio.h" #include "math.h" #define PI 3.1415926535897932384626433832795 void main() ( double x; printf("ievadiet kvadrāta malas vērtību x = "); scanf("%lf", &x dubultā y = x / 2; dubultā z = PI * y * y;

kā opciju, izmantojot pastāvīgo bibliotēku:

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

programma numur pieci no uzdevuma divi. nosacījums: atrisiniet kvadrātvienādojumu ar noteiktiem koeficientiem.
īstenošana:

#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); ) else ( pludiņš k; k = b * b - 4 * a * c; ja (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; }

(UZMANĪBU! norādot bibliotēkas, zīmju "lielāks par/mazāks par" vietā visur ir norādītas pēdiņas)

PĒCVĀRDS: citi uzdevumi tiks pievienoti vēlāk.

C++ programmēšanas valoda(izrunā "si plus plus") ir vairāku paradigmu programmēšanas valoda, kas atbalsta objektorientētu programmēšanu. Bjarne Stroustrup no Bell Labs izstrādāja C++ programmēšanas valodu 1980. gados, par pamatu izmantojot C programmēšanas valodu. Lielā mērā pateicoties milzīgajai C popularitātei, C++ programmēšanas valoda kļuva par populārāko valodu deviņdesmitajos gados. Programmēšana iesācējiem. Un tas joprojām ir ļoti plaši izmantots komerciālos lietojumos līdz pat šai dienai. C++ programmēšanas valoda ir aizstājusi C komerciālās lietojumprogrammās, jo tā ļauj programmētājiem izstrādāt arvien sarežģītākas sistēmas, neatsakoties no savām C saknēm (piemēram, bibliotēkas, kas rakstītas vienkāršā C valodā). Līdztekus objektorientētajam dizainam mūsdienu C++ atšķiras no C ar tās atbalstu vispārīgai programmēšanai un veidņu metaprogrammēšanai. Tas tiek īstenots, izmantojot veidu aizstājvārdus, iekļautos paplašinājumus, veidnes un // komentāru stila komentārus (lai gan ņemiet vērā, ka C pēc tam pieņēma // komentāru). Programmēšana manekeniem.

C++ vēsture
Stroustrup sāka strādāt pie valodas 1979. gadā, iedvesmojoties no Simula67 kā programmēšanas ietvara. AT&T pirmo reizi izmantoja valodu 1983. gada augustā. Sākotnējais kompilators saucās Cfront. Pirmā komerciālā izlaišana notika 1985. gada oktobrī. C++ tika standartizēts ar ISO/IEC 14882-1998 1998. gadā.

Nosaukuma "C++" vēsture
Šis nosaukums pieder Rick Mascitti (1983. gada vidus), un tas pirmo reizi tika izmantots 1983. gada decembrī. Agrāk, valodas izpētes un attīstības periodā, to bija ierasts saukt par "C ar klasēm". Galīgais nosaukums nāk no C un operatora "++" (kas palielina mainīgā vērtību par vienu) un parasto nosaukumu ar "+", lai norādītu uz datorprogrammas uzlabotajām iespējām, piemēram: "Wikipedia +". (Vienkārši sakot, plus zīme nozīmē programmas uzlabošanu un jaunas funkcionalitātes piešķiršanu) Saskaņā ar Stroustrup teikto: "šis nosaukums nozīmē izmaiņu no C evolucionāro raksturu." Lai gan lielākā daļa C koda ir derīga C++, C nav C++ apakškopa.
Daži C programmētāji ir atzīmējuši, ka, ja deklarējat x=3; un y=x++; tad izpildot x= 4 un y = 3; jo x tiek palielināts pēc tam, kad tā vērtība ir piešķirta y. Tomēr, ja rakstāt y=++x; , tad y=4 un x=4 .
Pēc šī apsvēruma piemērotāks C++ nosaukums faktiski varētu būt ++C. Tomēr C++ un ++C ir C paplašinājumi, tāpēc C++ forma ir biežāka nekā ++C.
Pedanti var atzīmēt, ka pēc C++ ieviešanas C valoda pati nemainījās un precīzākais nosaukums varētu būt “C +1”.

C++ īpašumtiesības
Neviens nerunā C++. Stroustrup un AT&T nesaņem autoratlīdzību par C++ izmantošanu.

Raidījums "Sveika Vikipēdija!"
Tālāk norādīto kodu var apkopot programmā, kas izdrukā ziņojuma tekstu.

Iekļaut // Galvene ir nepieciešama std::cout // Funkcijas main() sākums int main(int argc, const char**argv) ( // ( ... ) tiek izmantots, lai iekļautu koda blokus std:: cout<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

Klases definīcija

Iekļaut, izmantojot std::string; klase InetMessage ( virkne m_subject, m_to, m_from; public: InetMessage (const string& subject, const string& to, const string& from); virknes tēma () const; virkne līdz () const; virkne no () const; );

C++ bibliotēkas
C++ standarta bibliotēkas lielākoties ir C++ standarta bibliotēku superkopa. Lielākā daļa no C++ bibliotēkas ietver standarta veidņu bibliotēku (STL). STL nodrošina noderīgus rīkus, piemēram, iteratorus (kas ir kā augsta līmeņa norādes) un konteinerus (kas ir kā masīvi, kas var automātiski palielināties, iekļaujot jaunus elementus). Tāpat kā C, bibliotēkas piekļuves līdzeklis notiek, izmantojot direktīvu #include, lai iekļautu standarta galvenes failus. C++ nodrošina piecdesmit standarta galvenes, kas nav novecojušas.

Valodas nākotne
C++ programmēšanas valoda turpina attīstīties, lai apmierinātu pieaugošās prasības. Līdz pat šai dienai kompilatoru un izstrādes vides izstrādātāji turpina cīnīties, lai atbalstītu visas C++ funkcijas (apmēram 2004. gads), un šī situācija ir ievērojami uzlabojusies laikā no 1998. līdz 2003. gadam. Jo īpaši viena grupa, Boost.org, ir pielikusi daudz pūļu, lai padarītu C++ programmēšanas valodu tādu, kādu mēs to pazīstam šodien, un konsultēja standartu komiteju par funkcijām, kas darbojas un kuras ir jāuzlabo. Notiekošais darbs liecina, ka C++ arvien vairāk balstīsies uz savu daudzparadigmu raksturu. Piemēram, vietnē Boost.org mitinātie darbi ievērojami paplašina C++ funkcionālās un meta programmēšanas iespējas. C++ joprojām nav standarta mainīgo un funkciju nosaukšanai, padarot dažādu kompilatoru radīto kodu nesaderīgu.



Dalīties