You are on page 1of 5
92 Torutpespre C/C++ lizarea functietfindnextile 7 Inchiderea identiicatoruui de clvtare cu findclose ‘Glutares aubutelor eu functile nail Uilizarea functiet searchpath in locul func find penira ciuti. ‘Objinetea nel cdi de acces temporare lentes Sera eempoe Prezentarea funcietcreatenamedpipe Conectarea unl canal de wansfer ‘Apelarea unul canal de wansfer nominal Deconecuares unul canal de wansfer nominal Procesatea asincrond ~ F Unlizarea inudtlor 3 iesirlorasincrone: Structure overly Optic de UE asincc ei un ice kena de ispcky Gorele ‘Stabiliea unor cofe mal joase sau mal rieate ‘uncia getlasterror, Formatarea mesajelor de eroare cu formatmessage | ‘Operajt de VO asincrone cu un obiect kernel de evenianent Uilizarea fungjei waitformukpleabjects cu operat de 1/0 asinerone Prezentarea porturllor de intrare/lesre de completare Uillzarea operatilor de 1/0 eu alend pentra procesist Operajile de /O ou alert’ functioneazt mumai tn Win Unlizarea funciilor readfleex $1 witefleex. - Ulizarea unc! rutine eallbzce de inchetere Ulizarea unui program cu inririegl cu alert dows NT. 1475 1476 477 hae 479 1480 1481 1482 S14s3, wet 1485, 486 87 ad Ses) 1490 ¥491 492 aarict S94 295 1496 t4g7 198 S99 1500 Prustexe nopiont De C33 InTRODUCERE in PROGRAMARE Programele de calculator, cunoscute gi sub numele de software, sunt constitute dints-o serie de instructiuni pe care le executd calculatorul. Cand creat un program, trebuie si specifiy, Instrucjiunile pe care calculatorul ebuie s& le execute pentru a realiza operafile dort. Procesul de definie a instruciunilor pe care le executi calculatorul este numit programare. Cénd creati un progran, instruciunile se pistreazd inu-un fier ASCH al cirui sume congine, de obicei, extensia C pentru un program C si extensia CFP pentau un program Cr+, De ‘exemplu, dacd aj creat un program care realizeazi starl de plat, putet si denumififigerul «are confine instrucjunile sta.c, Csi C++ sunt doar doua din mulitudinea de limbaje de Drogramare. Multi programatori folosesc limbaje de programare ca BASIC, PASCAL $i FORTRAN, Fiecate linba} de programare are facili specifice gi proprille puncte forte (dat si slabiciuni). Oricum, limbajele de programare existé pentns a ne permite si definim Instrucjiunile pe care vrem si le execute ealculatorul lastrugtiunite pe care le executi un calculator sunt de fapt grapurl de 1 gi0 (cif binare) care ‘eprezint® semnale eleczonice procuse in interiorul calculatorului Pentns a programa primele calculatoare Gn anli 1940-1950), progeamatori webuiau si injeleagt modl in care calculatorul interpreta diferitele combinayi de 0 1, deoarece programatori scriau toate programele folosind fre binare. Cum programele deveneats din ce in ce mai mati, acest ‘mod de lucru a devent foarte incomod pentru programatort, De aceea cercetatont al creat limbaje de programare care permit exprimarea instructunilor calculator into form mal accesibila omului, Duod ce programatoril scriau instrucjunile intrun fisler (numit fisier urs), un al doiles program (aumit compilaton), convertea instriciiunle limbajulai de programate in sirile de 1 si 0 Ccunoscute sub numele de cod masind), pe cate le putea ingelege calculatorul. Fipierele dumneavoastri cu extensia EXE sau COM conjin codul masina (sirur de 1 $i 0) pe care calculatorul il va executa, Figura 1 ilustreazi procesul de compilare @ unui fisiersursi in urma cdruia se obyine un program executabil, i void mainvoid) 8 { printt ' 1 ) g é flename.c filename.exe Figura 1: Un compilaor convertese instructiunile din cod sursa in cod masinal Dupa ce ai creat un fisier sursi, rulaji un compillator pentru a convert instructnile intun format pe care calculatorul poate sil execute, Daca, de exemply,utlizali produsu Turbo r+ Lite™ al firmet Borland (inclus pe discul CD-ROM care insojeste aceasta carte), vel apela compilatorul cx optiunea Compile to OB/ din meniul Compile (ceea ce inseamna a da lnsimigfunes de compilare a Aisierului sursi). Urmitoarele capitole va indicd pasit pe care Uebuie sici executaji pantry a crea $12 compila un progam in. 34 Torut Despre C/CH+ CIC 2. Crearea unui rigicn sunsé ASCH ial i ind creat un progam, insrucunile pe care dri se exes calelatoal ebb laste | {urn fier numit fer sur Daca nu folosit Turbo Cr ate sa un compilter editor | petformant, uebuie st vi ces Fierce programulu! folosnd un edtor ASCH, cam at fr, programl EDIT pe cate oer sistemul de operate DOS. Na pute crea programe folosind | un procesor de text (cum ar fi Microsoft Word" sau Corel WordPerfect’). Dup3 cum stiti, © procesoarele de text va permits format documentele,aliniind marine, srindearacere Exive sau subliind texto sl aya mal deporte. Perea a realiza toate sceste opera, | procetoarele de text inoue caractere speciale in interior documeneler. Ou toate ci teste carctxe alt sens pent procesoral de tex, ele vor deity complatorul care | onverteste figierl sursi in cod masini 9 aceastt confine va cara econ, Cand vi crea | fisierl sur, asigurapevdc& af dat un nme care dscre cu acuratetefancjia programul De exemplu, ar trebul si denumiqi figierul sursi pentns un program de gestiune gestiune.c, — iar fxler rsh pent ua joe jotbalc Dac, pe de alti parte, folosti un compilator care include un editor intern, va puteyi crea programele in cadrul acestu editor, De exemplu, daci folositi Turbo Cr+ Lie, vei crea un | ‘ot fisier program cu optiunea New din meniul File, Pentru a crea primul dumneavoastra program cu ajutoral produsului Turbo C++ Lite, webvie si executay! urmatorii pag 1. Selectati meniul File, opfiunes New. Turbo C++ Lite va crea fisensl noname00.ropramul durmeavoasth care conjine eroatea, precum 0 Scurti deseiete a greeli, Folosi editorul pentru a crea figierulsintaxac, care conjine eroare de || Sstax, fn trmitoral exemple, programulol ii ipsese ghilimelele de inchidere a mesajului Total despre C/G: printé("Zotul despre C/Ct+); 96 _Torut prspns /G+ 4 Pruuete nomunt pe C_ 37 cand compiay! acest program, compilatorul va afisa un mesa} de eroure sintactick atuncl Gat Gralnest linia & In fungje de compllatoral dumneavoasrs, mesajul de eroare va ifort back ula! Turbo C++ Zt, ecranul Gumneavoasti va aig urmatoarele mesaje de Error sintaxa.c 5: Unterminated string or character constant in ‘function main grron sintexa-e 6: Function call missing ) in function main() Ente sintaxale €: Statement missing ; in function main() dumoeavous inarucilereepecven program, Dupl drecva ‘intilni o instructiune de genul: ms ee eee ee esas progam aCe are rea a aves one snl nrc Scat veil impiqi tn mci pari care sunt mai simply de injeles pent dumneavoasted Gi pentru Cla ctw ete propa. Gil de tun pe cae do ie rece sro grup de inscia (pomal pnp pent compan oo Bans, deomsos compton de Cv inp insulin dod eto cl ‘Kiss pap selec un spinon ei avec postin ite cmt eee src ear hoe! pa 7 progam fein sac cle oan neonate en pu ure ale D Acldtest ple sna! if Penra ciel Sec uebule set perce tue nde pupal esc Gu toate ca in codul sues sintasa.c exist doar o eroare, compilatorul de C va afisa tet neste de eroare. Lipsa ghilimeleior de inchidere provoacd o serie de erctl tn cascadi in ‘Cadral compilist (0 eroare duce la alta). Pentni a corecta erorile de sintaxa din programele dumneavoastri, urmattpasi indica ral Joss 1, Notayi-vi: uml linel lec! eror st adfugatio secur descriere 2, Balaji Bigierul sursi muténd cursorul la prima linie indicaté de compitator. 3, In figierul sur’, corectat eroarea si muti cursorul la urmatoarea linie, Cele mai mute ‘ediigare afigeazi numirul de ordine al liniel curente, pentru a va ajuta s& localiza linile din fiser. fn cazl figierubi sintaa.c city fgterul sl adiugat ghilimelee lips Salva fisteul pe disc sifolostcomplatoral pentru al compila. Dupt ce al coreciat eroarea, compilatonil v2 crea Fiseral inzaxa exe. Peniru a executa sintaxa.exe selecati meniul Run, opfunea Run, Pro- famul va rua gi va produce reaultaul de mai js: ‘Totul despre C/CH+ cr CoMmPLETAREA INSTRUCTIUNILOR PROGRAMULUI Dap cm a vi, program primal fol in propa primal. fla nsnes rin peta a un mes pecan Unit propam i, Jeno elon ele i ose tl auch prinpencu a Taisen Tome introns Sea nae sslele Ge dee 9 tie | rogram ‘ 5 Srructuna unul program riPic in © 1 sursi primud.g care conginea urmatoazele instrucivnk In sectiunea 2, ati creat (Patmcieaatzetaiolns z % Observati caracterul spatiu din interional n iu : i shoe Serg Saari eto ths op Scns cali eee pone cemretoreeerinne a we ane fo inceste insiuciuni sunt similare cu cele pe cae le vet int in maortatea programeor fa Ci tnate cazur, un figier sursd in C webule sf inceapl cu una sau mai multe instragiuel Sinciude:Instuejiunea include cere compllatorului de C s3 foloseascd conjinurul un seit fyler In cazal figicrului primal, insruciunea include cere compilatorulu! si Rigusasel un Bisier denumit sia‘. Figierele pe care le speciic insuctionea #include out fijere ASCII, care confin cod surst in C, Pup tipi sau vizualza conjimutul orci fe, stad pasi indica in capitol 13 Pierce pe eare le apelai cu odiectva #include hice! ay extensia ) sunt denumite fislere include sau fvere antet Cele mal rte dine fsrcle ante conuia insirciuni pe care programele dumneavoas le folosesc tn mad STL dar wey tnvaje mal tid In aceast cate gi despre alte utlizit ale fierelor ane ‘Gad indica complatoraloi de C si includ conyinutul unui Bixler, ne mat trebule Si sce AFISAREA IESIRII PE O LINIE NOUA “Cele mat multe dintre programele antetic sat mess) 2 cena anterloare au aflst mesajul Totul despre C/C++ pe ecranul ‘monkorului dumneavoasii, Pe misurd ce programele vor devenl mai complexe, probabil 98 Torut pespre C/C++ ‘acd au ii cere fact atfel, pring/va continua si afiyeze rezultatul pe linia curentd, Seopul tumitorulal program, o_linfa.c, este si aflgeze rezultatul pe dow linié succesive, reaultat aes sta este linia unu. Aceasta este linia a doua. ¢: Cand dotii ca prini/si inceapiafisarea pe o linie noul, tebule si include un caract special, nie nowdi C\n), in interioral textului pe care prini/urmeaza si aigeze. Cand printf intiineste caracterul \n, va avansa corsorul la inceputul lini uematoare. Programul de mal jos, dowa_lin., foloseste caracterullinle nous pentnu a afisa linia a doua de text pe 0 nowt ‘Atunel cdnd compila gl executati progratnul dowa_tin.c, pe eeranul dumneavoastr se va asa: ta este linia unu. Aceasta este linia a doua. c:\> Multe dintre programele aceste! clr folosesc caracterul lie noua. Practic,ecare program pe cate il vel scrie va folos caractertlinie noua in nul sau mal multe locus 8 Crace oirerenya INTRE MINUSCULE $IMAJUSCULE ‘Atunct cind vi sere programele, nu tebuie f italic C consider literele mar gi cele mick ca flind dferte. De regula, cele mai multe comenzi C folosesc minuscule, cele mal multe Constante C sunt scrise in intregime cu majuscule, iar cele mat multe vatiable folosese un famesice de ltere mari si mic, Programele in C folosesc mai ales Inerele mic, Deoasece | CCAnd compilai si executafi programu! @inie.c, ecranul dumneavoastl va afisa Prawexs wopiunt pe C_39 maton. program, emajusc foloseste itera M in numele Main Gn loc de main, fompllarea use va inenea 6 succes yicidia! “void Main (void) t ) CCind veri compila programul ermajusc.c, compilatorul Turbo C++ Lite va afiga urmitorul mes Linker error: Undefined symbol main in module TURBO_C\COS.ASH print# ("Acest program nu.va £1 compilat.” Mesajul relatv lipsit de sens pe care compilatonil Turbo C++ Liteilafigeazd este rezultatal sctleriicuvantulu Mainew majuscula M, In acest caz, pentru a corecta eroarea,trebule pur fi ‘Smmplu 88 inlocuig, Mais ca mais, Dupi ce afi efectuat inlocuitea, recompilay si executati progr 4 . SEES Enorité LoGICE (BUGS) seb Samadi fn seqiunea 4, af iavitt cd dact incileat una dintre cegulilelimbajul C, compiatorul va afin un mesa) de ereare de sintaxa, lag programul nu se va compila. Pe misuri ce programele domneavocstti vor deveni mai complexe, vor aparea situa tn care programnul Ee compileazi cu sucecs, dar ny executd corectfunctia pe care Fat dato. De exempiu, si presupunem ci dori cr urmitorul program, o_lintec, si afieze rezaltatul pe dovt lini, “Winclude eid wain (void) printé("Aceasta este linia unu.");_ print£("Aceasta este linia a doua.” Deoarece acest program nt inca nico regull de sintaxi a linbajlui C, programul se va compile cu succes. Torus, cand vet! executa program, el nu va alga rezultaul pe dou lini, cil va afiga pe o singur lic, 25a cum se vede mai jos Aoeasta este Lina unu, Aceasta este linia a dova en\> Cd programul durnnsavoastd nu lucreaz’ aga cum af fi dont, inseam’ cl el congine eror fogice, nurnte gi bugs. Cand programele dumneavoasirs conn ero logice cle vor apatea inmod sigun), tebuie sf incereatl s4 descopenii i sf corectayl cauza ero, Procestl de {nlfturse a esorlor logic dintr-un program ese numit depanare, Vi iavija mab Grau in faceast carte diferte‘ehnicl pe care le pote flosi pentru a localiza erolle logice din rogramul dumneavosstd, Petry fnceput, totus, cea mai bund cale de a localiza astfel de Zor este tptrcea tne! copila programului si examinarea Iu inte cu inte, pan cind vet Toeliza eronrea, Exarinarea program linie eu line se mumeste desk cheking. in cezul programulul olive. aceastd vericare ar tebui iv arate cl prima instruciune prini/na fonjne caracterullinie noua (\n), 40 Torut pespre C/C++ 10) Dezvoutares PRogRaMuLuI ‘Atundl cand creayl programe, executati de obicel aceias pay La Inceput, vet uuliza un editor pentru a crea figerul Sursi, Dupa aceea, veti compila progeamul. Dac programul confine erori sintactice, tebuie si edita figeral sursi si si corectatt erorle. Dupa ce progeamul este compilat cu succes, veti incerca si rulayi programul. Daci programul se fexecutd cu succes gl reaizeazi ceea ce era previzut, Inseam ch aj terminat de realizat progeamul, Pe de alti parte, daci prograrmul nu lucteazi cum v-ai fi asteptat, tebuie si Verifical linie cu linie codul sursa pentru a localiza eroarea logicl (asa cum am vizut tn sectiunea 9). Dup& ce corectal eroarea, ebule si compilayi din now codul sursi penisu 8 ‘rea un nov Risier executabil, Apot pute testa noul program pent a vi asigura ci el rea- Jizeazi sarcina aga cum ayi dori. Figura 10 ilustreazi procesul de dezvoltare a programulu FA] moe Taio ze oc, nu Figura 10 Procesul de deavoliare a programului 1100 Tieurne ve risiene ‘Atunel cind creajl un program tn C, vi plasay insuctiunlle taurun figler sursi care are fextensia C, Daci programul se compileaga cu succes, compilatorul va erea un figier ‘executabil, cu extensia EAE. Aga cum af cit in Sectunea 3, multe programe uullzeaza hgiere ‘antet (cu extensia H), care Contin instrucjiuni utllzate ‘in mod curent. Dac examina continutul directorului dumneavoastri dupa ce ati compilat un program, veti gist unul sau ‘mai multe fisiere cu extensia OB). Acestefisiere, denumitefigire obiec, conn Insirucjiun| sub form de sinuri de 0 $11, pe cate e injelege calculatorul. Totus, nu puteti executa aceste fisiere obiect, deoarece conginutul lor nu este chiar complet. Complitoral de C pune Is dspoae rune (cut a prin, cae realize opera frecent uilzate reduc nominal de lnncun pe cae ele le inode rogram, Dupi ce complatonleximinea sak program el creazl un Exe bie Fetal prosramalul print; complatra vaca un fier oblet denuml pmb. up sce, un program denim edo de eur lca program exeaab ph Coubinsres Inutugiunlor progsms! infer! cblect i fungile pe cae te deine emplatorl (cum ar pring. De cele mal multe of atin cod pel omypond peri a vi cram ira su, acest va pela nto automat earl de eg dak Programa sa compiat cu suces igura 11 dueeszi proce de compliare derealares Fephtor ona propa Prasteue NofIUNIDEC 41 Saas uate ea oi canoe, OY, pa POE on has rareine | >< oy puna a a ta Epirorut De LesaTuR! In secjiunea 11, afi invajat ci atunci cdnd compilati un program in C, un al doilea program, denumit editor de lege, combina insrvepunile programs domnesvoastl cd rtnele predefnite (pe care le Serine compiator, pent convert files obit ntoun program executable fl ain cazul proces de compare, n cursl cima se po detec ero de Sintaxa,procesal de eitare&legiturtor post, de asemenea, si inincase ero. Silvan de exeinplu urmatorl program, nu_printe, cae floseste, tn mod eronat, print in loc de Prin Winclude “void main (void) eee Regaturitor’) d 2 Pentru ci programul n4_print.cau incalci nici o reguld de sintaxd a limbajului C, programul va fi compilat cu succes, rezultind un fisier de tip OJ. Tous, din cana incinaeianit print nedefinite, editorul de legitusi Turbo C+ Lite va afiga urmatorul mesaj de eroare: Exror: Function ‘print’ should have a prototype in function main() Deoarece compilatonil de C nu define nici o functie denumitl print, editorul de legitual nu poate crea programul 2xecutabil nu_printexe, insi va afiga miesajul de eroate de mai sus, Pentru a corecta eroarea, edita figerul inlocuind print cu prin si recompilayi program, Figineve anteT Op eies Fiecaze program prezentat In cadmul acestei Cini foloseste una sau mai multe insruetiuni include penisu a cere compilatorului de C si foloseasca insirucyiunile incluse inesun fisier 4antet. Un fsier antet este un fisier ASCH, al cArui continut if puteti imprima sau afiga pe ecranul dumneavoast, Dacd examinati director eare contine compilatorul dumneavasti (Girectorul cite tn cazul compilatorului Turbo Cr+ Lio al femet Borland), vet intalni un subditector denumit include, Subdirectorul include conjine figierele antet ale compila-

You might also like