Come abbiamo già anticipato e come di sicuro vi è già chiaro, ogni istruzione deve terminare con un punto e virgola ;
Questo serve a dire al compilatore, "ehi, guarda che l'istruzione finisce qui".
Se scriviamo qualcosa come:
cout << "come butta fratello? "
cout << "alla grande fratello! ";
L'assenza del ; alla fine della prima riga di codice, impedisce al compilatore di capire che il primo cout finisce lì, e infatti il compilatore continua nella seconda riga di codice come se facesse parte della prima istruzione.
Questo perché nel C++ non è obbligatorio scrivere ogni istruzione su una riga separata, ne tantomeno scrivere un'istruzione su una sola riga.
Ad esempio questo è del tutto legittimo:
cout << "la stringa è troppo lunga, perciò
ho deciso di andare a capo. il compilatore la
interpreterà come una sola istruzione finché
non troverà il punto e virgola";
Anche questo è perfettamente legittimo:
cout << "prima istruzione"; cout << "seconda istruzione";
Come potete vedere nel primo caso si tratta di una sola istruzione su più linee. Tuttavia sinché il compilatore non incontra un punto e virgola tratterà le varie righe come una sola istruzione.
Nel secondo caso si tratta invece di due istruzioni sulla stessa linea. Il compilatore non avrà problemi a capirlo perché, quando incontrerà il punto e virgola, capirà che la prima istruzione è finita, e sta iniziando la seconda, anche se si trovano entrambe sulla stessa riga.
Non tutto nel C++ finisce con un punto e virgola. Le procedure e le strutture di controllo, essendo dei contenitori di codice, non devono essere delimitati da un punto e virgola.
Il compilatore capisce che si tratta di blocchi diversi grazie alle parentesi graffe { } .
Ad esempio:
void funzione_uno()Come potete vedere le due funzioni non finiscono con un punto e virgola.
{
//istruzioni...
}
void funzione_due()
{
//istruzioni...
}
In alcuni casi, e cioè quando una funzione o una struttura di controllo (le vedremo in uno dei prossimi post) contengono al proprio interno una sola linea di codice, è possibile tralasciare le parentesi graffe:
void funzione_1()Come potete vedere, la prima funzione contiene una sola istruzione, perciò abbiamo tralasciato le parentesi graffe. Il compilatore, non trovandole, capisce che la funzione contiene una sola istruzione, e dopo averla letta da per scontato che il contenuto finisce lì. Concettualmente è come se il compilatore inserisse per noi le parentesi graffe.
cout << "sono l'unica istruzione all'interno di funzione_1";
void funzione_2()
{
cout << "invece all'interno di funzione_2 ci sono più istruzioni";
cout << "perciò le parentesi graffe sono obbligatorie";
}
Se funzione_1 contenesse più di un'istruzione, il compilatore non trovando le parentesi graffe, interpreterebbe la seconda istruzione come esterna alla funzione.
In altre parole sarebbe un po' come scrivere così:
void funzione_1()La seconda istruzione resta fuori dal blocco di funzione_1. E' così che il compilatore vede una funzione senza parentesi graffe e con più di un'istruzione a seguire.
{
cout << "prima istruzione";
}
cout << "seconda istruzione";
Io per non sbagliarmi metto sempre le parentesi graffe, anche quando all'interno del blocco c'è una sola istruzione.
Un altro posto dove non è necessario utilizzare il punto e virgola è all'interno delle parentesi tonde. Le funzioni, così come le strutture di controllo, sono formate da un nome seguito da delle parentesi tonde. Ciò che scriviamo al loro interno non ha bisogno di chiudersi con un punto e virgola, essendoci già le parentesi tonde che si comportano da delimitatori.
Dopo questi piccoli chiarimenti sulla scrittura del codice in modo corretto, nel prossimo post parleremo finalmente delle variabili nel C++.
Nessun commento:
Posta un commento