IL LINGUAGGIO C Sviluppato agli inizi degli anni `70 nei Bell
Transcript
IL LINGUAGGIO C Sviluppato agli inizi degli anni `70 nei Bell
IL LINGUAGGIO C Sviluppato agli inizi degli anni '70 nei Bell Laboratories per ricerca, ha caratteristiche che lo rendono ideale per uso scientifico. Si sviluppa e si diffonde parallelamente a Unix. • È “portabile” Programmi scritti in C possono essere eseguiti su piattaforme hw/sw diverse. • Facilita approccio strutturato e ordinato al progetto di programmi • Ha standard dal 1990 ANSI/ISO C Il linguaggio C è il più usato per la scrittura dei nuclei di sistema operativo e di altre operazioni di basso livello, come driver per il controllo di periferiche; è stato pensato come sostituto dell’assembler per aumentare la portabilità dei programmi. La sua traduzione in codice macchina risulta molto diretta e le tecniche di ottimizzazione del codice sono ben sviluppate. Conoscendo il C, in pochi giorni si può imparare il C++ . NOSTRO APPROCCIO AL C Sempre con esempi che illustrano le caratteristiche del linguaggio. SCRIVERE ED ESEGUIRE IL PRIMO PROGRAMMA C • Scrivere un file sorgente di nome hello.c: /* Il mio primo programma */ #include <stdio.h> int main() { printf("Ciao\n"); return 0; } • Creare il file eseguibile (di nome a.out) con il comando: gcc hello.c • Eseguire a.out nel modo seguente: a.out oppure in questo modo: ./a.out La funzione main può ricevere argomenti (che per ora ignoriamo) e ritornare un numero intero; quando il main ritorna, cioè incontra una istruzione return, il programma termina; • se ritorna zero vuol dire che il programma ha avuto successo, • se ritorna non-zero vuol dire che c’è stato un errore; il numero ritornato può indicare il tipo di errore riscontrato (se chi ha chiamato il programma sa come usarlo). Ogni programma C è espresso come una sequenza di funzioni che possono ritornare un valore oppure nessun valore. Il C è un linguaggio tipizzato: il tipo di ogni variabile deve essere esplicitamente dichiarato dal programmatore. Il fatto di scrivere le istruzioni su righe diverse è una pura convenzione stilistica che serve per identificare a colpo d’occhio le istruzioni di un programma. I commenti sono porzioni di testo che non vengono considerate dal compilatore al momento di generare il file oggetto; vengono inseriti normalmente per permettere una più facile lettura o rilettura e comprensione del codice. È sempre buona norma commentare un programma spiegando come, perchè e cosa fa. Due opzioni per scrivere commenti: • delimitati da /* e */ • estesi da // fino alla fine della riga (forma che viene dal C++) Esempio: /* questo e' un commento */ // anche questo e' un commento / * anche questo e' un commento su più righe */ Oss. Il comando unix (da provare): echo $PATH specifica il cammino di ricerca che il S.O. segue per trovare i files da eseguire. Se il cammino non contiene la directory corrente (che si indica con un punto) occorre aggiornare la variabile PATH, o in modo temporaneo con il comando: PATH = $PATH:. o in modo permanente (scrivendo tale comando nel file .bashrc ) così in questo modo l'esecuzione di a.out avviene sempre con successo. Oss. • Si può creare il file eseguibile con un nome a piacere, ad es. con il nome salutami, usando il comando: gcc -o salutami hello.c • Eseguire salutami: salutami • Si può redirezionare l'output su un file a piacere di nome, ad esempio, risultato: a.out > risultato • Osservare il contenuto del file risultato con il comando: cat risultato PER LAVORARE A CASA CON PROFITTO E SEMPLICITÀ Cominciate ad eseguire il programma hello.c a casa sul vostro computer seguendo le istruzioni seguenti. Se queste istruzioni non vi bastano fatevi aiutare ma dovete farcela! COME LAVORARE CON MAC OS 1) Scaricare ed installare Xcode (ambiente di sviluppo integrato (Integrated development environment, IDE) sviluppato da Apple; è gratuito) Scrivere sul Desktop, usando l'editor di Xcode, il file hello.c seguendo le istruzioni: Xcode → File → New File → C and C++ → C File--> hello.c 2) Tra le Utilities c'è un Terminale che va avviato. Poi dal terminale digitare i comandi Unix: cd Desktop ls e proseguire normalmente come in classe. Oss. Potete usare Xcode per creare un progetto. Ma inizialmente è un pò più complicato. Potete seguire le indicazioni sotto indicate aprendo le finestre: Xcode → File → New Project → Command Line Utility → Standard Tool Poi date un nome al progetto, ad esempio Prova, e salvatelo sul Desktop; apritelo, scrivete nel main.c il vostro hello.c e cliccate su: Buid and Run Nei Products appare l'output del programma. COME LAVORARE CON WINDOWS 1) Scaricare ed installare Dev-C++ (è un “full-featured Integrated Development Environment (IDE); è gratuito ed è anche installato sui PC del laboratorio a matematica. Se invece volete installare Cygwin che è un ambiente “Linux-like” per Window andate al link: http://fdi.labmedinfo.org/FdIIB/lucidi/pratica/cygwininstallazione.pdf 2) Dopo aver installato Dev-C++ seguite le istruzioni: 1) file → new → source file 2) scrivere e poi salvare in hello.c : #include <stdio.h> #include <stdlib.h> int main(){ printf(“Ciao\n”); system(“PAUSE”); return 0; } execute → compile & run 3) Osservate dove viene messo l'eseguibile che è stato generato. Le istruzioni seguenti serviranno più tardi per eseguire un programma con redirezione dell'input o dell'output: 1) aprire la console di DOS (start → esegui → digitare “cmd” ) 2) spostarsi nella cartella dove si è creato l'eseguibile (che in Dev- C ++ ha estensione .exe) ad esempio con il comando: cd Desktop 3) listare il contenuto della cartella con il comando: dir e controllare l'esistenza del file eseguibile e di eventuali files di dati. 4) eseguire il programma con la redirezione dell'input e/o dell'output; ad esempio se l'eseguibile è hello.exe si può fare nel seguente modo: hello.exe < dati.txt > risultati.txt Infine se avete installato Cygwin ricordate che l'eseguibile generato dal comando gcc si chiama a.exe (non a.out). Per eseguire un programma quindi basta scrivere semplicemente: ./a.exe IN OGNI CASO Qualunque sia il vostro ambiente di lavoro, cercate subito di eseguire i primi programmi svolti insieme in classe. Come inviare a casa gli esercizi svolti in classe 1) Con un browser andare sul sito www.unipv.eu e cliccare in alto su webmail. 2) Cliccare su Webmail Studenti ed entrare con le vostre credenziali; scrivere a voi stessi una mail con allegati i files che volete inviare. SOMME/SOTTRAZIONI DI INTERI USO DI FUNZIONI DI LIBRERIA 1) Scrivere un file sorgente di nome radice.c nel modo seguente: /* programma che calcola la radice quadrata di un numero reale */ #include <math.h> #include <stdio.h> int main(){ float x, z; puts("Scrivi un numero reale:"); scanf("%f",&x); z = sqrt(x); printf("La radice quadrata di %f e' %f\n", x,z); return 0; } Si è usata la funzione sqrt()della libreria matematica quindi occorre dire al compilatore dove è definito il codice (programma) della funzione. gcc radice.c –lm gcc –o stamparadiceq radice.c -lm In ogni caso l’output del file eseguibile, se l' input è 1.44, contiene: La radice quadrata di 1.44 e' 1.2 2 ) Scrivere un file sorgente di nome potenza.c nel modo seguente: /* programma che calcola la potenza di un numero #include <math.h> #include <stdio.h> */ int main(){ int x, y, ris; puts("Scrivi base ed esponente:"); scanf("%d%d",&x,&y); ris = pow(x,y); printf("%d^%d = %d\n", x,y,ris); return 0; } L’output del file eseguibile, con i numeri 5 e 2 in input, contiene: 5^2 = 25 Oss: in questi due programmi tutte le variabili potevano essere dichiarate di tipo double. Le variabili double si leggono con %lf e si stampano con %f. UN PROGRAMMA IN ESECUZIONE CHE LEGGE E SCRIVE (FA INPUT/OUTPUT) Memoria Principale PROGRAMMA IN TASTIERA ESECUZIONE VIDEO FILE SU DISCO FILE SU DISCO DATI IN CORSO DI STAMPANTE ELABORAZIONE N.B. Cosi come è possibile mandare (ridirezionare) l’output su un file è anche possibile prendere (ridirezionare) l’input da file. Si fa così: a.out come < nomefileinput > nomefileoutput LE VARIE FASI DEL PROCESSO 1. Edit Editor file sorgente (su disco) hello.c #include <stdio.h> int main() { printf(“Ciao\n”); return 0; } 2. Preprocess Preprocessor file di testo (su disco) . . int printf (const char*, ...); int scanf (const char*, ...); int fprintf (FILE*, const char*, ...); . int main() { printf(“Ciao\n”); return 0; } 3. Compile Compiler file oggetto (su disco) hello.o 001010101010000 101010100001011 110100101000101 file oggetto (su disco) hello.o 001010101010000 101010100001011 110100101000101 altri files oggetto (da librerie su disco) 0010101010100000 1111000101010101 1101010101111100 Linker 4. Link file eseguibile (su disco) a.out 010101010101010101010101010101010 101010101001110101000000000000001 5. Load Loader 6. Execute Memoria principale 010101010101010101010101010101010 101010101001110101000000000000001 CPU N.B. Se vogliamo ottenere solamente il risultato della compilazione, cioè solo il file oggetto, il comando è: gcc –c hello.c e viene prodotto hello.o Se poi vogliamo procedere con la generazione dell'eseguibile: gcc hello.o