ebook img

Guida Completa C PDF

359 Pages·2000·79.783 MB·Italian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Guida Completa C

H. Schildt McGraw-Hill Libri Italia srl Miiano · New York · St. Louis · San Francisco · Oklahoma City Auckland · Bogota · Caracas · Hamburg · Lisboa · London · Madrid Mexico · Montreal · New Delhi · Paris · San Juan · Sao Paulo Singapore · Sydney· Tokyo · Toronto < lg111L11ra è ~1;11a 1•1,t1 11cll.1 vcriliLa e nella dt..:11111cntai.ioric delle infun11;u.ioni contenute in 41icsto lihro. T1111av1a né I' A111orc né la Mdìraw-1l ill l.ihri Italia possono assumersi alcuna respoosahilit.à <km·a nte <LI l11rn u1ili110. I .o stessn llirasi rx·r ogni p;:rsona o società coinvolta nella creazione, nella proKl111i11nc e 11dl.11hstrih11iionc tli q11,·,t11 lihro1. Indice T1111lll originai.::<'· ·1 h~ Con111lcrc Hof<"t'n< e C opyroght <ù 19XK t.,l,(;1aw-llill, lnc. v C'top)·11gl11 l'IK'I /\h(;1aw lldl l.ih1i ll;1lia srl piava Emilia 5 201 N Milano I d111111 do tr.11h1111111c, d11q1r1•l11111111l', d1 111c111111i11;1lio11c clcttm11it·a l<llalc '' par1.ialc t:on qualsiasi "'"'"' (n1111prc\i 1 1111l'r11ld111 e le rn111" f1111"1:11id1c) ~on<1 riservati per 11111i i pac~i. Capitolo I Pn:scntazionc clcl C 1.1 I.I Le.: origini Lici C 13 c 1.2 Il è un linguaggio Lii medio livello 14 c 1.3 Il è un linguaggio stnttt11ra10 15 Hcali11;11io11c Cth1nrialc: Edigc<1 ~rl. via dd I ~111111 ), 20121 Milano 1.4 Un linguaggio per programma1ori 16 Traduzione: Salvatore L.i Causi Copcnina: Marrn Ma1.1.uc;11<1 1.5 Compilatori e interpreti 18 Stampa: Litovclox, Trento 1.6 Struttura di un programma in C 19 1.7 Riepilogo della terminologia 24 ISllN 81!-3!!6-001!2-I Capitolo 2 Variabili, coslanli, opt·ratori cd csprcssioni 25 I' nli1.111nc g111g11u 19K9 2.1 ILlcntificatori 25 2.2 Tipi Lii dati 26 2.3 Dichiarazione di variabili 30 Printc<l in ltaly 2.4 Spccificatori della classe Lii me111orizza1.ionc 34 1214567K90l.TVl.ETK<J-l321m 2.5 Istruzioni di asscgnamcn10 39 2.6 Costanti 42 2.7 Operatori aritmetici, relazionali e logici 44 2.8 Opcralori sui bit 48 UNIX è un marchio registrato della AT &T; Turbo C è un marchio registrato della Borland 2.9 Operatori speciali 52 lntcmational, Jnc.: IBM è un marchio registrato della lntcmational Business Machincs Co.; MS-DOS 2.10 Espressioni 57 è un marchio registrato della Microsoft Co. 6 Indire Indice 7 Capilolo J Slrullurc di rnnlrollo 61 Capilolo6 Punlalori 129 3.1 Vero e falso in C 62 6.1 I puntatori sono indirizzi 130 3.2 Istruzione C 62 6.2 Variabili di tipo puntatore 130 :u Selezione condizionale 62 6.3 Operatori su puntatori 131 ir 3.4 li COStnlltO 62 6.4 Espressioni con puntatori 132 3.5 li costruito swilch 67 6.5 Le funzioni di allocazione dinamica dd C 135 3.6 Loop 71 6.6 Puntatori e array 137 3.7 Il loop for 71 6.7 Puntatori a punratori 140 3.8 11 loop whilc 76 6.8 Inizializzazione dci puntatori 142 3.9 Il loop do-whilc 78 6.9 Puntatori a funzioni 143 3.10 hrcak 79 6.10 I puntatori non sono interi 1·15 3.11 cxii() 81 6.11 Problemi connessi ali 'uso dci JH1n1a1ori 1·16 3 12 I .'istruzione coni inuc 82 3.13 Etichette e goto 83 Capilolo7 Tipi di dali definiti dall'ulcnle 149 7.1 Strutture 150 Capilolo 4 Funzioni 85 7.2 Le strutture come argomenti dc.:lle funzioni 159 4.1 l.'i~truziom: rcturn 86 7 .3 Puntatori a strutture 161 4.2 Regole di visibilità ddlc funzioni 88 7 .4 ArrJy e strutture all'interno di strutture 165 4.3 Parametri delle funzioni 89 7.5 Campi di bit 166 4.4 Gli argomenti argc e argv di main() 95 7.6 Unioni 168 4.5 funzioni che restituiscono valori di tipo diverso dall'intero 97 7.7 li tipo cnumerativo 170 4.6 Prototipi cli funzione 100 7 .8 Uso di sizeof per assicurare la portabilità 172 4.7 Ricorsione 102 7.9 La parola chiave typedef 173 4.8 Puntatori a funzioni 103 4.9 Considerazioni legate alla realizzazione 106 Capitolo 8 Il sistema di input/output 4.10 Librerieefile 107 8.1 Input/output da tem1inale 176 8.2 Input/output formattato da tenninale 178 Capitolo S Array 109 8.3 Il sistema di input/output bufferizzato 183 5.1 Array a una dimensione I 09 8.4 Il sistema di input/output non hufferizzato: k funzioni 5.2 Array a una dimensione come argomenti delle funzioni 111 dell'ambiente UNIX 199 5.3 Arrayaduedimcnsioni 114 8.5 Scelta di un approccio 205 5.4 Array multidimensionali 118 5.5 Array e punt~tori 119 5.6 Allocazione dinamica degli array 120 Capitolo 9 Il preprocessore dcl Ce le direttive al compilatore 207 e 5.7 Inizializzazione degli array 123 9.1 Il preprocessore dcl 208 5.8 Un gioco d'esempio 125 9.2 La direttiva #define 208 9.3 La direttiva #crror 211 9.4 La direttiva #include 211 9.5 Dircuivc ùi i:ompilazione conùiziunale 212 Capilolo 15 Fun:doni di allot·azione dinamica ]59 9.6 1.n direttiva #lmdcf 215 9.7 La direttiva #line 216 Capitolo 16 Funzioni per la gl'slione di lesto e gralka 371 9.8 La dire11iva #pra~ma 216 9.9 Nomi di macro predelìniti 216 9.1( ) Commenti 217 Capitolo 17 Altre runzioni 425 Capilolo IO Linker, librerie e lite di intestazione 219 Capitolo 18 Ordinamento e riccn:a 4·t5 1O . I 11 linkcr 220 18.1 Ordinamento 445 I 0.2 La libreria standard del C 222 18.2 Algoritmi di ordinamento efficienti 454 I 0.3 File di intestazione 223 18.3 Ordinarncnto ùi file 462 10.4 Ridt:finizione delle funzioni <li libreria 225 18.4 Ricerca 468 10.5 stddef.h e limits.h 226 Capitolo 19 Code, stack, lislc e alhcri 471 19.I Lecode 472 Capitolo 11 Fum.ioni di inp11t/011lp11t 227 19.2 Lo stack 480 11.1 Canali 228 19.3 Le liste concatenate 485 11.2 f-ile 228 19.4 L'albero binario 500 11.3 Dalla 1eoria alla pratica 229 11.4 Le funzioni di 1/0 230 Capitolo 20 Allocazione dinamka 509 20.I Array sparsi e liste concatenate S 1O 20.2 Array sparsi e alberi binari 513 Capitolo 12 Fun:tioni di gcslione di stringhe e caralleri 275 20.3 Array sparsi e array di puntatori 516 20.4 1l ashing 519 20.5 Scelta di un metodo 523 Capitolo 13 Funzioni matematiche 297 Capitolo 21 Valutazione e controllo sintatlico *Ile espressioni 525 21. I Espressioni 526 Capitolo 14 Funzioni che operano su dala e ora e altre runzioni legate al sistema operativo 313 21.2 Analisi sintattica di espressioni 530 21.3 Un semplice analizzatore sintattico di espressioni 531 14.1 Ora e da1a di sistema 314 21.4 Aggiunta di variabili ali 'analizzatore sintattico 537 14.2 Gestione dci directory 322 21.S Controlli sintatlici in un analizzatore a discesa ricorsiva 545 14.3 Gestione dci processi 329 14.4 Interfacciamento direuo con il sistema operativo 336 IO lndl(C l11dil"C 11 Capilolo 22 Hisolul.ionc di problemi con tecniche Capitolo 26 Ingegneria dd software in C 651 di intelligen:t.a arlificiale 547 26.1 Progetrazione wp-down 652 22. l Rappresentazione e tenninologia 548 26.2 Funzioni a prova di bomba 655 22.2 Esplosione combinatoria 550 26.3 Prototipi delle funzioni 657 22.3 Valutazione di una strategia 552 26.4 lini e makc 657 22.4 Una rappresentazione grafica 553 22.5 Sviluppo in profondità 555 22.6 Sviluppo in ampiezza 564 Capitolo 27 Efficicnw, portahilit à e dehugging 22.7 Un po' di euristica 566 27.1 Elfo:icnza 6(>3 22.8 Ricerca in salita 567 27.2 Portabili1à 672 22.9 S1ra1egie di costo minimo 573 27.3 Debugging 675 22.IO Scelta di una tecnica di ricerca 575 27.4 Verifica dci progra111111i <i!U 22.11 Ricerca c..li soluzioni multiple 575 27.5 Manulcnzionc dci programmi (>85 22.12 Ricerca della soluzione ottimale 582 22.13 Il probkma delle chiavi perdute 587 Capitolo 28 C++ 687 28.1 Tipi di d;11i as1r;i11i 688 Capitolo 23 liso ddlc risorse di sistema 591 28.2 Oggcui 690 23.1 La famiglia di processori 8086 591 28.3 Dichiarazione degli argomen1i ddle funzioni 690 23.2 Gli interrnpt e l'MS-DOS 592 28.4 Commenti 69 I 23.3 Accesso alle risorse di sis11.:111a auravcrso il ROM-BIOS 596 28.5 Classi 692 23.4 Accesso alle funzioni di sistema attraverso il DOS 605 28.6 Sovrapposizione delle funl.ioni 699 23.5 ConsiJcrazioni finali su Il 'uso delle risorse dcl sistema 61 O 28.7 Sovrapposizione degli operJlori 701 28.8 Altre caraueristichc del C++ 704 Capitolo 24 Grafica 611 24.1 Modalità e set di colori 612 Appendice A Differenze fra ANSI Ce UNIX C 705 24.2 I pixel 613 24.3 Tracciamento di linee 617 Indice analitico 709 2-Ì.4 Tracciamento e riempi111en10 di n:trangoli 620 24.5 Tracciamento di cin.:onfcrenze 624 24.6 Un esempio di pacchetro gralico 626 Capitolo 25 Interfacciamento con routine in asscmbler 637 25. l Convenzioni di chiamata 638 25.2 Creazione di una funzione in assemblcr 641 25.3 Uso di #asm e #endasm 648 25.4 Quando usare l'asscmbler M9 Capitolo I Presentazione del C I.I Le origini dcl C e 1.2 Il è un linguaggio di medio livello e 1.3 Il è un linguaggio strutturato 1.4 Un linguaggio per programmatori 1.5 Compilatori e interpreti 1.6 Struttura di un programma in C 1.7 Riepilogo della terminologia Lo scopo di questo capitolo è di presentare una visione generale del linguaggio C, delle sue origini, dei suoi usi e della sua filosofia. 1.1 Le origini del C Dcnnis Ritchie ha definito e realizzato il C su un computer DEC PDP-11 che usava il sistema operativo UNIX. Il C è il risultato di un processo di sviluppo iniziato con un linguaggio chiamato BCPL. li DCPL, sviluppato da Martin Richards, ha ponato alla nascita dcl linguaggio B, inventato da Ken Thompson, che ha condotto a sua volta allo sviluppo del C negli anni Settanta. Per molti anni, la versione e "standard" del è stata quella fornita insieme alla versione 5 del sistema operativo UNIX, descritta nel libro Thc C Prugramming La11guagc di Brian Kernighan e Dennis Ritchie (Prentice-1 lall, 1978). In seguito alla crescente popolariù dci microcomputer, si sono avute versioni successive del C. Prcscnt;izionc lici C 15 l\:r la 111aggim pane. queste reali11.azioni sono risultate tra loro co111patihili, alrrn:nu per quanto riguarda il codice sorgente, pur esistendo alcun~ differenze Alln livello Ada Moduta·2 dovute all'asscn1.a di un vero e proprio standard. Per porre nmedro a questa Pascal situaz.ionc, è stata creala una commissione all'inizio dell'estate dcl 1983, con lo CODOI. scopo di fornire 11110 standard ANSI Jel linguaggio C. FORTRAN BASIC e Medio livello 1.2 Il C è un linguaggio di medio livello FORTI! Il e vic11r l!L'llt:ralrrn:nte imlic;rto COllle un lin>:•lll>:XiO c_li mcclit1 _l~vcllu. <;on i~ Basso livello MAsasccrmo halscsrc mblcr tcrmine "111edio" non si soli intendono caratteristiche negative: non sr intende rnfatll dirc cl11.: il C: è 111c.:no potente, pii1 difficile da usare o meno svilu1~pa1odci_linguag~i ad alto livdlo. Collle il BASIC o il Pascal, e neppure che il e è s11111le al lrnguaggro l'llbella I. I Il C rispetto agli alui linguaggi di prngra111ma1.ionc. as~cmlilcr, con i problemi a esso associati. . . . JI C è considcralO un linguaggio di medio livello perché Unisce elementi Ùet linguaggi ad alto livello con le funzionalità dcll'assemhler. I.a T~bella 1.1 mostra e Clllllt: i) C si inst:risce nello spt:llro Ùt:i linguaggi di prograrnrna7.tone. 1.3 Il è un linguaggio strutturato li codice pnxlotto dal C è t:strcmamente ponabile: porcahilitcl significa I~ possibi· lità di adattare il software scritto per un ceno tipo di computer a un tipo differente. Sebbene il C non possa essere considerato un linguaggio stru//urato a blocchi in Se per csc111pin potete trasferire un programma scritto per un Appie Il su un PC senso accademico, di solito ci si riferisce a esso come a un linguaggio strutturato, IBM, allora il programma è ponabile. . . a causa della sua similitudine con Algol, Pascal e Modula-2. Tecnicamente, un Tuni i linguaggi di programmazione ad alto livello introducono il conc~tto_ dr tipo linguaggio strutturato a blocchi pemlette di dichiarare sottoprogrammi in maniera di dato. Un tipo di dato definisce un insieme di valori che una vanab1le può annidata. In C questo non ~ possibile e quindi il linguaggio non può essere assumere, associati a un insieme di operazioni che è possibile effettuare su quella C: formalmente considerato un linguaggio strutturato, La caratteristica che distingue variabile. Tipi di dari comuni sono gi interi, i reali e i caratteri: Sebbene definis~a un linguaggio strutturato è la possibilità di definire in modo preciso regole di in1ernamen1e cinque tipi di dati primari, non può essere considerato un ltngu.agg10 visibilità dei dati e del codice necessarie all'esecuzione di un compito specifico fone111cn1e 1ipizza10, come invece lo sono Pascal e Ada. 11 C con~ente.quas1 tutt~ rispetto al resto del programma. Un modo per definire queste regole e quindi creare le conversioni ira tipi: per esempio, potete liberamente mescolare 111ten e caratten <; moduli di programma è quello di utilizzare sottoprogrammi autosufficienti (un nella maggi(lr parte delle espressioni. In generale, i compilatori eseguono u~ sottoprogramma autosufficiente, "stand-alone", definisce dei dati di sua proprietà, numero limitato di verifiche di errore durante l'esecuzione, come ti controllo sui che quindi possono essere usati solo dal sottoprogramma stesso). L'uso di sotto· limiti dL·gli array o il controlln di compatibilità tra tipi degli argomenti. La maggior programmi di questo genere consente di scrivere il codice del sottoprogramma parte dci rnn1rolli è quindi lasciata alla responsabilità ?cl programmai.ore, per non stesso in modo che gli eventi che occorrono al loro interno non provochino alcun ridurre la velocità di esecuzione. Di conseguenza sono 1p rogrammaton che devono effetto collaterale su altre parti dcl programma. Sviluppando sottoprogrammi decidere l'opportunità o meno di tali controlli. . . . autosufficienti avete bisogno solo di sapere cosa fanno e non come lo fanno. Ecco Essendo un linguaggio di medio livello, il C consente la gestione d1 bit, b~te e alc.:uni esempi di linguaggi strutturati e non strutturati. e indirizzi. Questa poss'ibilità rende il panicola.nnente ad allo alla programmazione di sistema, in cui tali operazioni sono comuni. . Non slrullur11ti Strutlun1ti Un 'altra importante caratteristica del C è il fatto che possiede solo 32 pa~ole chiave (27 sono definite dallo standard Kernighan e Ritchie e 5 sono state aggiunte nello FOKTRAN Pascal standard i\NSI). Per avere un termine di paragone, il 13ASIC per il PC IBM ha hen BASIC Alla e COUOL 159 par.ile l:hiavc. Modula·2 16 C'.1p111>l11 I Prcscn1;11.ionc dcl e I 7 I linb11;1gi;i 11uukmi 1cm.ln110 a essere stru11ura1i, a differenza <li quelli più vecchi solamente pun1ualizzarc che non si tratta di un linguaggio ideato per l'uso da parte e il mo1ivo ~os1;11niale <li q11es1a tendenza è legato alla maggiore facilità di scrittura di programmatori. Il BASIC, d'altro canto, è stato creato per dare la possibilità a e tl1 111;111111e11Lionc <lei programmi scri11i con linguaggi strutturati. non programmatori di programmare un computer in maniera da consentire la c c. li mallone con Clii si costruiscono i programmi in è la funzione. In tutta soluzione di semplici problemi. l'attività svolta da un programma viene eseguita per mezzo di funzioni. Tramite 11 C costituisce un linguaggio a sé stante: la sua definizione è stata infatti le fu1llioni è possihile scomporre un programma in blocchi più picwli, 011enendo innuenzata, dalla fase di ideazione alla fase di test, da programmatori. Il risulta10 così programmi più modulari. Una volta creata e provata una funzione, si può è che il c è un linguaggio che dà ai programmatori quello che essi desiderano: coniar<.: su di cs~;1 anche in situa7.ioni <li verse da quelle per cui era stata creata, con poche restrizioni, pochi problemi, codice veloce ed efficienza. Con l'uso del C è la cer10.:1a che eseguirà il compilo previsto senza effetti indesiderati sul resto dcl possibi~e p~~1.mc programmi la cui efficienza è paragonabile a quella dei pro progr;1111111;1. I.a possihili1à di crcare funzioni in grado di essere eseguite in modo grammi scntt1 1n asscmbler, potendo però usufruire dci vantaggi di un linguaggio indipc11dcn1c dal co111esto è fondamentale q11an<lo si tratta di sviluppare applica ad alto livello. Ci si rende conto facilmente, a questo punto, dci motivi che fanno z10111 di g1a 11d1di111ensioni nelle quali ciò d1e è s1ato costruiw da un programmatore del e il linguaggio più diffuso tra i programma1ori che svolgono la loro auività non deve i11rl11c11zare accidentalmente i risuhati forniti da ahre parti dcl codice. nell'ambito professionale. Un 'ulleriore possibilità <li modulari nazione dcl codice viene offerta dal C per L'efficienza dcl C, unita alla possibili1à di lavorare dircttamen1e su bit e by1e, mezzo dci hlocchi cli codice, che sono blocchi di is1ruzioni logicamente connesse permette, in molle situazioni, di utilizzare il c al posto dell'asscmbler: è queslo un che vengono 1rattate come un'unità. In C. un blocco si ottiene racchiudendo delle e i~1po11ante motivo della_popolarità che il ha presso i programmatori. li linguag istruzioni Ira parentesi graffe apcnc e chiuse, come nel seguenle esempio. g10 assembler è caratterizzato da una corrispondenza diretta tra l'istruzione sim bolica e il codice binario in cui viene tradotta. Sebbene l 'asscmblcr dia al program ll(x<10) ( p111111("" I 10ppo basso. prova ancora"); matore la possibilità di raggiungere il massimo della flessibilità e dell'efficienza scan1n:,d·. &x): i programmi che ne risultano sono notoriamente scomodi per quanto riguarda I~ sviluppo e la correzione. Inoltre, a causa della non strutturazione del linguaggio, i l.c due 1~1r111i1111i dopo l'if (racchiu~e ira le parentesi graffe) sono entrambe programmi assembler risultano spesso essere un groviglio di salti e di chiamate a es1:g11i11.: se x è 111i11orc di 10. Le parrn1esi graffe e le due istruzioni costituiscono sottoprogrammi, tanto da meritare l'appella1ivo di codice a spaghe11i. Ancora più un bl<i-:co. Si 1ra11a di un'uni1à logica, in cui 11n'istru1.ionc non può essere eseguita importante può essere considerata la mancanza di portabili1à del codice tra com senza l'al1ra. In C sono sostan7.ialmcnte intercambiabili singole istruzioni e bloc puter con CPU differenti. chi. La nalllra dci blocchi consente non solo di guadagnare in leggibilità, eleganza Inizialmente il C è stato impiegato per la programmazione di sistema. Un program ed efficien1.a, ma anche di programmare lavorando a un più elevato livello di ma di sistema fa pane di un 'ampia classe di programmi che formano una porzione as1razione. del sistema operativo del computer o dei suoi programmi di supporto. Per esempio, sono generalmente considerati di sistema i seguenti programmi: • sistemi operativi • IA lJn linguaggio per programmatori assemblatori • interpreti • compilatori 11 C è un ling11;1ggio cream per programmatori. Potreste sorprendervi di fronte a • editor una simik affermazione e chiedervi se non è vero che tutti i linguaggi sono nati • gestori di basi di dati per i programmatori; la risposta a questa domanda è no! Po1e1e considerare per esempio i classici casi cli linguaggi per non programmatori: In seguito alla crescente popolarità che il C ha ottenuto, molti programmatori il CODOL e il BASIC. Il COBOL non è stato progettato per migliorare l'affidabi hanno iniziato a fame uso per qualsiasi tipo di impiego, grazie alla sua ponabilità lità del codice prodotto oppure per aumentare la velocità di stesura del codice del ed efficienza, tanto da renderlo il più diffuso linguaggio general-purposc. Inoltre, programma, ma piuttosto per fornire a utenti non programmatori la possibilità di in seguito alla standardizzazione del C, esistono pochi dubbi sul fatto che il suo leggere e capire il significato del programma. Precisiamo che non è nostra inten dominio si estenderà fino al prossimo secolo. zione farc un processo al COBOL, dcl quale riconosciamo i meriti: vogliamo PrcscnlJl.lllOC lici e 19 h1r~C il lllO(IVll più impOrtanle della diffusione dd C è Che j programmatori ne valido riguarda i programmi brevi, meno di 50 linee, che non contengono loop. ~ono c111usia~1i! I la la velocità dell'assembler e l'es1endibilità del FORTI I ma in Due termini che ricorreranno spesso nel seguito di questo libro sono compile-time C non ci sono le rcs1riiioni che caraucrizzano il Pascal o il Mo<lula-2. (momenro della compilazione) e run-tirne (mv111e11to de/I' esecuzione): con i I ter Ogni progra111111a1nre può creare e utilizzare una libreria di fun1.ioni falla su misura mine compile-time facciamo riferimento a eventi che si verificano <luran1c il per le sue c~igcnzc. Inoltre, consc11tendo, anzi incoraggiando, la pratica delle processo di compilazione, mentre con run-time ci riferiamo a eventi che si e co111pil:11.io111 separale. il conscnlc di affrontare progelli di grandi dimensioni verificano durante l'esecuzione dcl programma. Purtroppo sentirete parlare di 111ini111i1.1:111d11 lJ pro<luLionc <li codice ridondante. questi tem1ini congiuntame11te alla parola errore, per cui avremo errori i11 rompi /azione cd errori in esecuzione. 1.5 Compilatori e interpreti 1.6 Struttura di un programma in C I 1ci 1111111c 11111111lt11orc e i111er11rl'te si rafcri~c1rno al modo in cui un programma viene esegui io. Tcorica1rn:11te entrambe le soluzioni sono sempre possibili, ma esistono In Tabella 1.2 troviamo tulle le parole chiave che, unite alla sintassi, formano il linguaggi che tradizionalmente sono eseguiti nell'uno o nell'altro dei due modi. linguaggio di programmazione C. Pa esempio, il BASIC è solitamente interpretato, mentre il C è generalmente Tutte le parole chiave dcl C sono minuscole. Poiché il C distingue tra maiuscole e e co111pi lato_( lfrccnteme11te, però, gli interpreti dcl hanno comi11ciato a diffondersi minuscole, else è una parola chiave, mentre ELSE non lo è. Le parole chiave non tra i program111a1ori come ausilio nella fase di sviluppo e verifica dei programmi.) possono ess<.:re usate per altro scopo. per esempio come nomi <li variabili. 11 lllodo in cui un programma viene eseguito non dipende unicamente dal linguag Tutti i programmi in C sono costituiti da una o più funzioni. L'unica funzione che gio in cui i; si.:riuo. Interpreti e compilatori sono semplicemente dei programmi deve essere sempre presente è chiamata ma in( ), ed è la prima funzione a cui viene sofisticati che operano sul codice sorgente. ceduto il controllo quando inizia l'esecuzione di un programma. Secondo il miglior lln interprc1e legge il codice sorgente dcl programma. una linea per volta, ed stile di programmazione, main() si occupa del controllo generale delle varie esegue le opcrazioni ~pccificate in quella linea. Un compilatore legge l'intero attività del programma: in altre parole, non esegue alcuna elaborazione ma si limita progra111111a e lo convene in codice oggetto, che è una traduzione del codice a chiamare le funzioni più opponune per eseguire il compito richiesto. Sebbene la sorgente in un formato che il computer esegue direttamente. Il codice oggetlo viene parola main non sia esplicitamente definita come facente pane del linguaggio C, anche chia111:110 codice biMrio o rodice macchina. Dopo la compilazione, il è bene far fin1a che lo sia: l'uso di main come nome di una variabile, per esempio, programma seri 110 in codice sorgente non ha più significato ai fini dell'esecuzione. può facilmente confondere il compilatore. Se si fa uso di un interprete, il sorgente deve invece essere disponibile ogni volta La struttura generale di un programma C è illustrata in Figura LI, dove fl ( ). ... , fN( ) che ~i intende eseguire il programma. Nel caso dcl BASIC, per esempio, dovete rappresentano funzioni definite dall'utenle. pri111a mandare in esecuzione l'interprete BASIC, poi cari<.:are il programma e quinJ1 lam:i:irc il comando RlJN: a questo punto l'interprete BASIC esegue il LIDRERIA DI FUNZIONI E COLLEGAMENTO programma una linea per volta. L'intero processo va ripetuto ogni volta che desiderate c~cguire il programma. Se usate un compilatore, invece, il programma In teoria sarebbe possibile scrivere un intero programma C costitui10 unicamente viene convertito in codice che il computer può eseguire direttamente. Poiché la da istruzioni definite autonomamente dal programmatore. In realtà ciò capita comptlazionc avviene una sola volta, tutto quello <.:he dovete fare all'atto dell'ese raramente in quanto la definizione formale del linguaggio non prevede istruzioni cuzione è baucre il nome del programma. Quindi, l'interprete introduce il sovrac di l/Q_ Pertanto, per svolgere tali operazioni, è inevitabile fare ricorso a funzioni carico di do ... er essere lanciato ogni volta, a differenza del compilatore che è predefinite della libreria del C. lanciato una sola volta. Tutti i compilatori C possiedono una libreria standard che fornisce le funzioni La compilazione richiede una cena quantità di tempo in più rispetto all'interpre opportune per l'esecuzione delle operazioni più comuni. In alcuni casi, la libreria tazione, ma il 1cmpo risparmiato nel l'esecuzione di un programma compilato è ben è effettivamente contenuta in un unico grosso file; altre volte, invece, è suddivisa superio1c: 1 programmi compilati infatti hanno un tempo d'esecuzione molto in più file di dimensioni inferiori: ciò risulta più efficiente e più pratico. Per infe1imc 11~pcth> a quelli interpretati. L'unico caso in cui quanto dello non è più semplicità, comunque, nel resto dcl libro ci riferiremo alla libreria sempre al

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.