Sezione 1.1 
Struttura di un programma C++ 


Probabilmente il modo migliore per iniziare lo studio di un linguaggio di programmazione è cominciare con un programma. Ecco quindi il nostro primo programma:



// il mio primo programma in C++

#include <iostream.h>

int main ()
{
  cout << "Salve gente!";
  return 0;
}
Salve gente!

Nella parte sinistra è riportato il codice del nostro primo programma che noi chiameremo, ad esempio, salve.cpp. La parte destra mostra quello che si ottiene eseguendolo. Il modo con cui si scrive, compila ed esegue un programma dipende dal sistema operativo, dall'editore di testi e dal compilatore che abbiamo a disposizione. Noi useremo il sistema operativo Linux, l'editore di testi emacs ed il compilatore g++. I comandi corrispondenti sono:

$ emacs salve.cpp &

richiama l'editore emacs che apre (o crea se non presente) il file salve.cpp

$ g++ -o salve salve.cpp

richiama il compilatore g++ per compilare il programma scritto nel file salve.cpp, il risultato viene scritto nel file eseguibile salve.

$ salve

manda in esecuzione l'eseguibile salve

Il precedente programma è il primo programma che la maggior parte dei principianti scrive ed il risultato che si ottiene è l'apparire della scritta Salve gente sullo schermo. E' uno dei più semplici programmi che si possano scrivere in C++ ma esso già contiene le principali componenti di un qualsiasi programma C++. Vediamole una alla volta:

// il mio primo programma in C++
Questa è una riga di commento. Tutte le righe che iniziano con due sbarrette (//) vengono considerate commento e non hanno alcun effetto sul comportamento del programma. Esse possono essere usate  dal programmatore per includere nel codice del programma alcune brevi spiegazioni   ed osservazioni. Nel nostro caso la riga contiene una breve spiegazione di  ciò che il programma deve fare.
#include <iostream.h>
Le frasi che iniziano con il simbolo di cancelletto (# ) sono direttive per il preprocessore del compilatore. Esse non sono istruzioni   eseguibili ma soltanto indicazioni per il compilatore. Nel nostro caso la   frase  #include <iostream.h> dice al preprocessore del compilatore di includere il file della libreria standard iostream.h . Questo particolare file contiene le dichiarazioni delle operazioni basilari   di input-output definite nella libreria standard del C++ e viene incluso  perché tali operazioni serviranno in seguito nel programma. .
int main ()
Questa riga è l'inizio della dichiarazione della funzione main. La funzione main è il punto da cui inizia l'esecuzione di un qualsiasi programma C++. E' irrilevante il punto del programma in cui compare tale funzione - essa è sempre la prima ad essere eseguita. Ovviamente è indispensabile che ogni  programma contenga una funzione  main.
main è seguito da una coppia di parentesi () perché esso è una funzione.  In C++ tutte le funzioni sono seguite da una coppia di parentesi () che, eventualmente, possono contenere degli argomenti. Subito dopo la dichiarazione (l'intestazione) della funzione viene il contenuto (il corpo) della funzione  racchiuso tra parentesi graffe ({} ).
cout << "Salve gente";
Questa istruzione effettua la cosa più importante del programma cout è il flusso standard di output del C++ (di solito indirizzato allo schermo), e l'effetto dell'istruzione  è appunto quello di inserire una sequenza di caratteri (nel nostro caso "Salve gente") in tale flusso di output. La dichiarazione di cout si trova nel file iostream.h, ed è per questo che abbiamo dovuto includere tale file. Notiamo che la frase finisce con un punto e virgola (;). Il punto e virgola indica la fine dell'istruzione e deve essere messo alla fine di ogni istruzione (uno degli errori più comuni èappuntodimenticare il punto e virgola alla fine di una istruzione.
return 0;
L'istruzione return fa terminare la funzione main() e ritorna quello che è indicato di seguito, nel nostro caso 0. Questo è il modo normale di terminare un programma la cui esecuzione è avvenuta senza errori. Come vedremo nei prossimi esempi, tutti i programmi C++ finiscono con una frase simile a questa. (Molti compilatori inseriscono automaticamente una istruzione return alla fine di una funzione.)
Dunque, non tutte le righe di un programma denotano una azione. Vi sono righe che contengono soltanto commenti (quelle che iniziano con // ), righe che contengono istruzioni per il precompilatore (quelle che iniziano con #), righe che iniziano la dichiarazione di una funzione (nel nostro caso, la funzione main) e infine righe che contengono istruzioni eseguibili (come cout << "Salve gente"; ), queste ultime sono contenute nel corpo della funzione (il blocco delimitato dalle parentesi graffe ({}) della funzione main .

Il programma è stato diviso in più righe per renderlo più leggibile, ma questo non è necessario. Ad esempio, invece di

int main ()
{
  cout << "Salve gente";
  return 0;
}
avremmo potuto scrivere:
int main () { cout << "Salve gente"; return 0; }
tutto nella stessa riga e questo avrebbe avuto esattamente lo stesso significato.

In C++ la separazione tra istruzioni è indicata dal punto e virgola (;) che termina ciascuna di esse. La suddivisione del programma in più righe serve a rendere il programma più leggibile alle persone che lo leggono, per il compilatore la cosa non fa' alcuna differenza.

Ecco un programma con qualche altra istruzione:



// il mio secondo programma in C++

#include <iostream.h>

int main ()
{
  cout << "Salve gente! ";
  cout << "Sono un programma C++";
  return 0;
}
Salve gente! Sono un programma C++

In questo caso abbiamo usato l'operazione cout <<  due volte in due distinte istruzioni. Ancora una volta, la separazione in più righe del programma ha unicamente lo scopo di renderlo leggibile, infatti si sarebbe potuto scrivere:

int main () { cout << "Salve gente! "; cout << "Sono un programma C++"; return 0; }
Potremmo anche suddividere il testo del programma in un numero maggiore di righe se lo riteniamo conveniente:
int main ()
{
  cout <<
    "Salve gente! ";
  cout
    << "Sono un programma C++";
  return 0;
}
e il risultato sarebbe stato esattamente lo stesso.

Questa regola non vale per le direttive per il preprocessore (quelle che iniziano con #) in quanto esse non sono delle vere istruzioni..   Sono righe che verranno lette ed interpretate dal preprocessore e che spariranno dal codice che verrà compilato dal compilatore. Esse devono comparire ciascuna in una propria riga e non richiedono il punto e virgola (;) alla fine.

Commenti

I commenti sono parti del testo che vengono ignorate dal compilatore. Essi non fanno nulla. Il loro scopo è permettere al programmatore di aggiungere note o brevi descrizioni in mezzo alle istruzioni del programma.

In C++ ci sono due modi di inserire commenti:

// riga di commento
/* blocco di commento */
Il primo considera commento tutto ciò che segue la coppia di sbarre (//) fino alla fine della riga. Il secondo, detto blocco di commento, considera commento tutto ciò che è compreso tra la coppia di caratteri /* e la prima occorrenza successiva della coppia di caratteri  */, eventualmente anche più righe di testo.

Aggiungiamo qualche commento al nostro secondo programma:



/* il mio secondo programma in C++
   con piu' commenti */

#include <iostream.h>

int main ()
{
  cout << "Salve gente! ";     // dice Salve gente!
  cout << "Sono un programma C++"; // dice Sono un programma C++
  return 0;
}
Salve gente! Sono un programma C++

Se inserite commenti senza usare le combimazioni di caratteri //, /* e */, il compilatore li interpreta come istruzioni e, molto probabilmente, segnalerà qualche errore di sintassi. Un altro errore comune è dimenticare la coppia di caratteri */ alla fine di un blocco di commenti: in questo caso il compilatore interpreterà come commento anche le istruzioni seguenti e potrebbe anche non segnalare errore sintattico. 






Precedente :
Menù Principale

indice
Successivo:
1.2 - Variabili, tipi di dato, costanti.