I Commenti in C++

Concetti Chiave
  • Un commento è una porzione di testo in un programma che viene ignorata dal compilatore.
  • I commenti aiutano i lettori umani del codice sorgente a comprendere il significato del programma.
  • Esistono due tipi di commenti in C++: commenti a riga singola (che iniziano con //) e commenti a blocco (che iniziano con /* e terminano con */).
  • Le coppie di commenti non possono annidarsi.

Commenti

Prima che i nostri programmi diventino molto più complessi, dovremmo studiare come C++ gestisce i commenti.

I commenti aiutano i lettori umani dei nostri programmi. Vengono tipicamente usati per riassumere un algoritmo, identificare lo scopo di una variabile o chiarire una porzione di codice altrimenti oscura. Il compilatore ignora i commenti, quindi non hanno alcun effetto sul comportamento o sulle prestazioni del programma.

Sebbene il compilatore ignori i commenti, i lettori del nostro codice non lo fanno. I programmatori tendono a credere ai commenti anche quando altre parti della documentazione del sistema sono obsolete. Un commento errato è peggiore di nessun commento, perché può fuorviare il lettore. Quando si modifica il codice, è necessario aggiornare anche i commenti!

Tipi di commenti in C++

Esistono due tipi di commenti in C++: a riga singola e a blocco.

Un commento a riga singola inizia con una doppia barra (//) e termina con una nuova riga. Tutto ciò che si trova a destra delle barre nella riga corrente è ignorato dal compilatore. Un commento di questo tipo può contenere qualsiasi testo, incluse ulteriori doppie barre.

L'altro tipo di commento utilizza due delimitatori (/* e */) ereditati dal linguaggio C. Tali commenti iniziano con /* e terminano con il successivo */. Questi commenti possono includere qualsiasi cosa che non sia */, incluse le nuove righe. Il compilatore tratta tutto ciò che si trova tra /* e */ come parte del commento.

Una coppia di commenti può essere inserita ovunque sia consentito un tab, uno spazio o una nuova riga. Le coppie di commenti possono estendersi su più righe di un programma, ma non è obbligatorio farlo. Quando una coppia di commenti si estende su più righe, è spesso buona pratica indicare visivamente che le righe interne fanno parte di un commento multi-linea. Il nostro stile prevede di iniziare ogni riga del commento con un asterisco, indicando così che l'intero intervallo è un commento multi-linea.

I programmi contengono tipicamente una combinazione di entrambi i formati di commento. Le coppie di commenti sono generalmente usate per spiegazioni multi-linea, mentre i commenti con doppia barra tendono a essere usati per annotazioni a mezza riga o a riga singola:

#include <iostream>

/*
 * Funzione main semplice:
 * Legge due numeri e scrive la loro somma
 */
int main()
{
    // chiedere all'utente di inserire due numeri
    std::cout << "Enter two numbers:" << std::endl;

    int valore1 = 0, valore2 = 0; // variabili per contenere l'input letto

    std::cin >> valore1 >> valore2; // leggere l'input
    std::cout << "The sum of " << valore1 << " and " << valore2
                << " is " << valore1 + valore2 << std::endl;

    return 0;
}

Le coppie di commenti non si annidano

Un commento che inizia con /* termina con il successivo */. Di conseguenza, una coppia di commenti non può apparire all'interno di un'altra. I messaggi di errore del compilatore generati da questo tipo di errore possono risultare misteriosi e confusi. Come esempio, si provi a compilare il programma seguente sul proprio sistema:

/*
 * le coppie di commenti /* */ non possono annidarsi.
 * ''non possono annidarsi'' è considerato codice sorgente,
 * così come il resto del programma
 */
int main()
{
     return 0;
}

Spesso è necessario commentare un blocco di codice durante il debug. Poiché quel codice potrebbe contenere coppie di commenti annidate, il modo migliore per commentare un blocco è inserire commenti a riga singola all'inizio di ogni riga nella sezione che si desidera ignorare:

// /*
// *  tutto ciò che si trova all'interno di un commento a riga singola è ignorato
// *  incluse le coppie di commenti annidate
// */

Esercizi

  • Indicare quali, se ce ne sono, delle seguenti istruzioni di output sono legali:

    std::cout << "/*";
    std::cout << "*/";
    std::cout << /* "*/" */;
    std::cout << /* "*/" /* "/*" */;
    

    Soluzione:

    Le prime due istruzioni sono legali. La terza istruzione non è legale perché il commento inizia con /* e termina con il successivo */, che si trova prima della fine dell'istruzione. La quarta istruzione è legale perché il commento inizia con /* e termina con il successivo */, che si trova alla fine dell'istruzione.