Benvenuti alla seconda lezione del corso base di linguaggio C.
Oggi vedremo come si compila un programma scritto in tale linguaggio, ed inoltre daremo una spiegazione più accurata del codice presentato nella prima lezione.
Inanzitutto iniziamo dicendo che un programma scritto in C (come quasi tutti i linguaggi di programmazione esistenti) per poter funzionare ha bisogno di essere compilato. La fase di compilazione non è altro che prendere il file sorgente (quello scritto da noi) e trasformarlo in un formato interpretabile dalla macchina su cui il programma dovrà andare in esecuzione. I dettagli del funzionamento di un compilatore non sono inerenti a questo corso, quindi li salteremo. Se qualcuno di voi però è interessato me lo faccia sapere e magari scriverò un tutorial sulle varie fasi che portano un file sorgente ad essere trasformato in un file binario eseguibile.
Di compilatori per linguaggio C ne esistono diversi. Per i nostri esempi può andar bene qualsiasi compilatore, visto che, come ho detto nella scorsa lezione, cercheremo di usare il più possibile lo standard internazionale ANSI. In questo corso comunque, come compilatore, useremo il Visual C++ 6.0 della Microsoft.
Per creare un file eseguibile con questo compilatore bisogna seguire determinati passi: va prima creato un'area di progetto (che racchiuderà tutti i file che comporranno il programma futuro) dopodichè al progetto creato vanno aggiunti i singoli file che si andranno ad editare.
Per programmi composti da un unico file (come l'esempio della scorsa lezione) questa procedura può sembrare noiosa e lunga, ma è bene abituarcisi per quando si arriverà a scrivere programmi più corposi.
Vediamo come creare un nuovo progetto:
Aprite Visual C++ Dopodichè dal menù in alto scegliete: File->New...
Dalla finestra che appare scegliete Projects e di questi scegliete Win32 Console Application. Ora nella casella di testo Project name date un nome al vosto progetto (ad esempio pr1) e nella casella Location scegliete il percorso ove salvare il progetto. Infine fate click su OK.
Scegliete "An empty project" e cliccate su Finish.Avete appena creato l'area che conterrà tutti i file del vostro progetto.
Ora agite come prima sul menù: File->New... e scegliete l'etichetta "Files".
Da questa finestra scegliete la voce "C++ Source File" e date un nome al file che volete editare nella casella di testo "File name". Cliccate su ok.
Adesso siete pronti per scrivere il vostro primo programma, quindi potete riportare nella finestra bianca alla vostra destra il sorgente visto nella prima lezione.
Una volta inserito il vostro programma potrete compilarlo e creare l'eseguibile. Siccome in realtà la creazione di un eseguibile è suddivisa in due parti (la compilazione ed il linkaggio) questa può essere fatta in una volta sola attraverso la voce di menù: Build->Build "nome del programma"
Questo creerà all'interno dell'area di progetto da voi creata una cartella di nome Debug dove dentro troverete tra i vari files creati anche un file .exe che rappresenta il programma pronto per essere eseguito.
Se nel codice sorgente da voi scritto dovessero esserci degli errori sintattici il compilatore se ne accorgerà e ve li segnalerà nella finestra posta in basso. Chiaramente se ci sono errori eviterà di creare il file eseguibile finale chiamandovi prima a correggerli!
Esistono anche altri compilatori, più o meno potenti. Per questo corso un compilatore vale l'altro...ho preferito presentarvi questo in quanto oltre ad essere quello utilizzato da me trovo che sia un ottimo strumento di lavoro per creare applicazioni scritte in C. Ripeto comunque che potete utilizzare lo strumento che preferite.
Un'ultima cosa per quanto riguarda il compilatore Visual C++: se andate nella cartella ove è stato creato il progetto noterete diversi file. Il file da aprire ogni qualvolta vorrete riprendere in mano il vostro programma sorgente è il file con estensione .dsw che contiene i riferimenti all'intero progetto creato con tutti i file sorgenti che ne fanno parte
Dopo questa breve parentesi su come compilare un file sorgente vediamo di analizzare il programma presentato nella prima lezione. Non riscriverò l'intero sorgente per motivi di spazio, ma mi limiterò a discuterne una riga alla volta
#include <stdio.h>
Tutte le istruzioni che iniziano con il simbolo # sono direttive del preprocessore. Senza scendere troppo nel dettaglio va detto che la direttiva #include permette di inserire nel codice, nel punto in cui viene dichiarata, tutto il codice presente all'interno del file di intestazione specificato successivamente, in questo caso il file "stdio.h". I file di intestazione contengono prototipi di funzione e strutture dati che possono essere utilizzati nel corso del programma. Ad esempio, siccome nel nostro programma, per stampare a video la frase "Ciao mondo!" utilizziamo la funzione printf, il prototipo di questa funzione è contenuto in stdio.h. Se non avessimo incluso questo file il compilatore ci avrebbe segnalato un errore dicendo che non conosceva la funzione printf.
Cosa sia un prototipo, comunque, lo analizzeremo in dettaglio quando vedremo le funzioni.
Un'ultima cosa sugli include: se si vuole includere un file di intestazione standard (fornito, cioè, con il compilatore stesso) il nome va specificato tra parentesi angolari. Possiamo anche crearci noi i nostri file di intestazione: se li salviamo nella cartella "include" del compilatore manteniamo sempre le parentesi angolari, altrimenti possiamo salvarli nella stessa cartella del nostro progetto, ed in questo caso dovremo inserire il nome del file tra doppi apicini.
int main(int argc, char *argv[])
Come detto nella scorsa lezione, la funzione da cui parte il nostro programma deve essere ASSOLUTAMENTE chiamata main. Anche se è un po' prematuro parlare di parametri, visto che ancora non abbiamo visto come è strutturata una funzione, possiamo dire che la funzione main potrebbe prendere in input dei parametri dalla linea di comando. Questo significa che una volta creato il nostro eseguibile, se apriamo la finestra di dos da cui lo lanceremo, possiamo specificare dalla linea di comando, oltre al nome, anche delle informazioni aggiuntive che potranno essere elaborate dal nostro programma.
I file allegati alla lezione fanno proprio questo: se lanciate il programma "lezione2" senza specificare nulla verrà stampato a video la frase "Ciao a tutti!"...se invece lanciate il programma aggiungendo il vostro nome in coda (ad esempio Diana) verrà stampato "Ciao Diana!".
Per il momento non aggiungeremo altro a questa spiegazione, anche se, visionando il sorgente è abbastanza intuitivo come tutto questo funzioni.
printf("Ciao mondo!\n");
Questa è un istruzione che serve per stampare a video tutto ciò che viene specificato tra doppi apicini. In realtà, questa è una funzione che accetta come parametro in ingresso quello che vogliamo vedere stampato a video. Più avanti vedremo quanto è potente questa funzione!
return 0;
L'istruzione return viene utilizzata per specificare la fine di una funzione. Grazie a questa istruzione è possibile, inoltre, restituire a chi ha chiamato la funzione un valore. In questo caso la funzione "main" possiamo dire che è stata chiamata dal dos ed una volta arrivati alla fine, il nostro programma restituisce i comandi al dos tramite la return aggiungendo come parametro 0. In realtà è possibile restituire al dos un qualsiasi valore. Quando non esistevano ancora i sistemi operativi a finestra e si lavorava tutto a riga di comando, questo valore era importante per capire se c'era stato un errore nel programma oppure se era andato tutto bene (in questo caso veniva restituito il valore 0 come in questo caso). Oggi possiamo dire che il valore restituito al dos risulta essere ininfluente.
E con questo finisce anche la seconda lezione. Se ci fossero delle cose che non sono chiare fate pure le vostre domande all'interno di questo stesso post. La prossima volta cominceremo a vedere cosa sono le variabili
Oggi vedremo come si compila un programma scritto in tale linguaggio, ed inoltre daremo una spiegazione più accurata del codice presentato nella prima lezione.
Inanzitutto iniziamo dicendo che un programma scritto in C (come quasi tutti i linguaggi di programmazione esistenti) per poter funzionare ha bisogno di essere compilato. La fase di compilazione non è altro che prendere il file sorgente (quello scritto da noi) e trasformarlo in un formato interpretabile dalla macchina su cui il programma dovrà andare in esecuzione. I dettagli del funzionamento di un compilatore non sono inerenti a questo corso, quindi li salteremo. Se qualcuno di voi però è interessato me lo faccia sapere e magari scriverò un tutorial sulle varie fasi che portano un file sorgente ad essere trasformato in un file binario eseguibile.
Di compilatori per linguaggio C ne esistono diversi. Per i nostri esempi può andar bene qualsiasi compilatore, visto che, come ho detto nella scorsa lezione, cercheremo di usare il più possibile lo standard internazionale ANSI. In questo corso comunque, come compilatore, useremo il Visual C++ 6.0 della Microsoft.
Per creare un file eseguibile con questo compilatore bisogna seguire determinati passi: va prima creato un'area di progetto (che racchiuderà tutti i file che comporranno il programma futuro) dopodichè al progetto creato vanno aggiunti i singoli file che si andranno ad editare.
Per programmi composti da un unico file (come l'esempio della scorsa lezione) questa procedura può sembrare noiosa e lunga, ma è bene abituarcisi per quando si arriverà a scrivere programmi più corposi.
Vediamo come creare un nuovo progetto:
Aprite Visual C++ Dopodichè dal menù in alto scegliete: File->New...
Dalla finestra che appare scegliete Projects e di questi scegliete Win32 Console Application. Ora nella casella di testo Project name date un nome al vosto progetto (ad esempio pr1) e nella casella Location scegliete il percorso ove salvare il progetto. Infine fate click su OK.
Scegliete "An empty project" e cliccate su Finish.Avete appena creato l'area che conterrà tutti i file del vostro progetto.
Ora agite come prima sul menù: File->New... e scegliete l'etichetta "Files".
Da questa finestra scegliete la voce "C++ Source File" e date un nome al file che volete editare nella casella di testo "File name". Cliccate su ok.
Adesso siete pronti per scrivere il vostro primo programma, quindi potete riportare nella finestra bianca alla vostra destra il sorgente visto nella prima lezione.
Una volta inserito il vostro programma potrete compilarlo e creare l'eseguibile. Siccome in realtà la creazione di un eseguibile è suddivisa in due parti (la compilazione ed il linkaggio) questa può essere fatta in una volta sola attraverso la voce di menù: Build->Build "nome del programma"
Questo creerà all'interno dell'area di progetto da voi creata una cartella di nome Debug dove dentro troverete tra i vari files creati anche un file .exe che rappresenta il programma pronto per essere eseguito.
Se nel codice sorgente da voi scritto dovessero esserci degli errori sintattici il compilatore se ne accorgerà e ve li segnalerà nella finestra posta in basso. Chiaramente se ci sono errori eviterà di creare il file eseguibile finale chiamandovi prima a correggerli!
Esistono anche altri compilatori, più o meno potenti. Per questo corso un compilatore vale l'altro...ho preferito presentarvi questo in quanto oltre ad essere quello utilizzato da me trovo che sia un ottimo strumento di lavoro per creare applicazioni scritte in C. Ripeto comunque che potete utilizzare lo strumento che preferite.
Un'ultima cosa per quanto riguarda il compilatore Visual C++: se andate nella cartella ove è stato creato il progetto noterete diversi file. Il file da aprire ogni qualvolta vorrete riprendere in mano il vostro programma sorgente è il file con estensione .dsw che contiene i riferimenti all'intero progetto creato con tutti i file sorgenti che ne fanno parte
Dopo questa breve parentesi su come compilare un file sorgente vediamo di analizzare il programma presentato nella prima lezione. Non riscriverò l'intero sorgente per motivi di spazio, ma mi limiterò a discuterne una riga alla volta
#include <stdio.h>
Tutte le istruzioni che iniziano con il simbolo # sono direttive del preprocessore. Senza scendere troppo nel dettaglio va detto che la direttiva #include permette di inserire nel codice, nel punto in cui viene dichiarata, tutto il codice presente all'interno del file di intestazione specificato successivamente, in questo caso il file "stdio.h". I file di intestazione contengono prototipi di funzione e strutture dati che possono essere utilizzati nel corso del programma. Ad esempio, siccome nel nostro programma, per stampare a video la frase "Ciao mondo!" utilizziamo la funzione printf, il prototipo di questa funzione è contenuto in stdio.h. Se non avessimo incluso questo file il compilatore ci avrebbe segnalato un errore dicendo che non conosceva la funzione printf.
Cosa sia un prototipo, comunque, lo analizzeremo in dettaglio quando vedremo le funzioni.
Un'ultima cosa sugli include: se si vuole includere un file di intestazione standard (fornito, cioè, con il compilatore stesso) il nome va specificato tra parentesi angolari. Possiamo anche crearci noi i nostri file di intestazione: se li salviamo nella cartella "include" del compilatore manteniamo sempre le parentesi angolari, altrimenti possiamo salvarli nella stessa cartella del nostro progetto, ed in questo caso dovremo inserire il nome del file tra doppi apicini.
int main(int argc, char *argv[])
Come detto nella scorsa lezione, la funzione da cui parte il nostro programma deve essere ASSOLUTAMENTE chiamata main. Anche se è un po' prematuro parlare di parametri, visto che ancora non abbiamo visto come è strutturata una funzione, possiamo dire che la funzione main potrebbe prendere in input dei parametri dalla linea di comando. Questo significa che una volta creato il nostro eseguibile, se apriamo la finestra di dos da cui lo lanceremo, possiamo specificare dalla linea di comando, oltre al nome, anche delle informazioni aggiuntive che potranno essere elaborate dal nostro programma.
I file allegati alla lezione fanno proprio questo: se lanciate il programma "lezione2" senza specificare nulla verrà stampato a video la frase "Ciao a tutti!"...se invece lanciate il programma aggiungendo il vostro nome in coda (ad esempio Diana) verrà stampato "Ciao Diana!".
Per il momento non aggiungeremo altro a questa spiegazione, anche se, visionando il sorgente è abbastanza intuitivo come tutto questo funzioni.
printf("Ciao mondo!\n");
Questa è un istruzione che serve per stampare a video tutto ciò che viene specificato tra doppi apicini. In realtà, questa è una funzione che accetta come parametro in ingresso quello che vogliamo vedere stampato a video. Più avanti vedremo quanto è potente questa funzione!
return 0;
L'istruzione return viene utilizzata per specificare la fine di una funzione. Grazie a questa istruzione è possibile, inoltre, restituire a chi ha chiamato la funzione un valore. In questo caso la funzione "main" possiamo dire che è stata chiamata dal dos ed una volta arrivati alla fine, il nostro programma restituisce i comandi al dos tramite la return aggiungendo come parametro 0. In realtà è possibile restituire al dos un qualsiasi valore. Quando non esistevano ancora i sistemi operativi a finestra e si lavorava tutto a riga di comando, questo valore era importante per capire se c'era stato un errore nel programma oppure se era andato tutto bene (in questo caso veniva restituito il valore 0 come in questo caso). Oggi possiamo dire che il valore restituito al dos risulta essere ininfluente.
E con questo finisce anche la seconda lezione. Se ci fossero delle cose che non sono chiare fate pure le vostre domande all'interno di questo stesso post. La prossima volta cominceremo a vedere cosa sono le variabili
Comment